Shopping Cart
Flash 8 (hack for Flash MX 2004)
Cet exemple montre l'utilisation des composants DataSet et DataGrid pour gérer un panier (ou cart).
Flash 8 a corrigé un bug line 165 dans DataGridRow.as (qui posait problème
lors de l'utilisation de NumericStepper dans un Renderer)..
Pour faire fonctionner
cette démo en Flash MX2004, vous devez enlever
un commentaire dans la fonction
size du fichier QuantityRenderer.as.
cart.zip (629 Ko)
Explication
Pour gérer le cart, on utilise un MVC (Modèle-Vue-Controleur).
Le modèle est représenté par le DataSet panier_ds. La vue est représentée par le DataGrid panier_dg.
On utilise deux renderer. QuantityCellRenderer permet d'augmenter ou de diminuer la quantité d'un produit. RemoveCellRenderer permet de supprimer un produit.
Le calcul du subtotal pour un produit utilise la méthode calcFields d'un DataSet. Cette méthode permet de définir un attribut calculé. Dans notre exemple, l'attribut itemtotal est égal à la quantité du produit (attribut quantity) par le prix du produit (attribut itemprice).
Pour définir un attribut calculé dans Flash MX2004, on initialise l'attribut kind à la valeur la valeur Caculated pour l'attribut calculé itemtotal avec l'inspecteur.
Pour définir le calcul pour l'attribut, iIl faut définir un listener sur l'événement calcFields et la méthode de calcul (dans le fichier form.CartForm).
panier_ds.addEventListener("calcFields", Delegate.create(this,
doCalcFields));
public function doCalcFields(eventObj:Object):Void {
var target = eventObj.target;
target.itemtotal = target.quantity * target.itemprice;
}
Pour gérer le total, on définit une méthode doShowTotal qui est appelé sur chaque changement du modèle DataSet. Cette méthode est appelée lorque la valeur d'un attribut change ou lorsqu'on ajoute ou supprime un attribut.
panier_ds.addEventListener("modelChanged", Delegate.create(this,
doShowTotal));
public function doShowTotal():Void {
var total:Number = doComputeTotal();
total_la.text = "<total>Total: "+formatNumber(total,2)+"</total>";
}
public function doComputeTotal():Number {
var dataset = panier_ds;
var len = dataset.length;
var total:Number = 0;
for (var i:Number = 0; i < len; i++) {
var item:Object = dataset.items[i];
total += item.itemtotal;
}
return total;
}
Version
vaersion 1.1 - 15 Sept 2005 : Adaptation à Flash 8. Pour Flash 2004, il faut supprimer un commentaire dans la fonction size du fichier QuantityRenderer.as.
version 1.0 - 22 Fév 2005 : version initiale