Re: [flexcoders] Re: getting the total of values of an array collection that is updated manually

Saturday, December 10, 2011

 

I haven't been following this thread, and without looking at the book:

If you assume there won't be more than 100 things in the cart, it is just as easy to add them all up every time there is a change.  Then some setup code should call:

    orderColl.addEventListener(CollectionEvent.COLLECTION_CHANGE, calculateSum);

And calculate sum would do something like:

    private function calculateSum(event:CollectionEvent):void
    {
            var amt:Number = 0;
            var n:int = orderColl.length;
            for (var i:int = 0; I < n; i++)
            {
                var cartEntry:Object = orderColl.getItemAt(i);
                amt += cartEntry.quantity * cartEntry.price;
            }
            sum.text = amt.toPrecision(2);
    }

On 12/9/11 2:09 PM, "claudiu ursica" <the_braniak@yahoo.com> wrote:


 
 
   

You know there is an working example in this book pretty close to your, is flex 4 though but you will get the picture.

http://www.amazon.com/Adobe-Flex-Training-Michael-Labriola/dp/0321660501

C

  
 


 From:
ZIONIST <stinasius@yahoo.com>
 To: flexcoders@yahoogroups.com
 Sent: Friday, December 9, 2011 4:52 PM
 Subject: [flexcoders] Re: getting the total of values of an array collection that is updated manually
 

  
   
Hi Guys, i have finally got the total to update when new items are added to the cart. One thing that i have failed to do is to get the total to update when quantity is changed and when a product is removed from the cart(list component). Any help on this? Here is the latest code that only gets the total to update when a new product is added.

"App"

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="horizontal"
xmlns:ns1="*"
xmlns:ns2="as_logic.*">
<mx:states>
<mx:State name="dark">
<mx:SetProperty target="{product}"
name="text"
value="Dark Chocolate"/>
<mx:SetProperty target="{price}"
name="text"
value="50"/>
</mx:State>
<mx:State name="spread">
<mx:SetProperty target="{product}"
name="text"
value="Drinking Chocolate"/>
<mx:SetProperty target="{price}"
name="text"
value="100"/>
</mx:State>
</mx:states>

<mx:Script>
<![CDATA[
import mx.controls.listClasses.ListData;
import mx.collections.ArrayCollection;

[Bindable]
private var orderColl:ArrayCollection=new ArrayCollection();

private function addProduct():void
{

//Create an object to hold the data
var obj:Object=new Object();
//Assign the variables to it
obj.Product=product.text;
obj.Price=price.text;
//Add the object to the list
orderColl.addItemAt(obj, 0);

}

public function deleteOrder():void
{

//Remove the item from the array collection
orderColl.removeItemAt(products.selectedIndex);

}

public function init():void
{
var total:Number=0;
for (var i:String in orderColl)
{
total+=Number(orderColl[i].Price);
}
sum.text=usdFormatter.format(total.toString());
}
]]>
</mx:Script>

<mx:DefaultTileListEffect id="dtle0"
  fadeOutDuration="300"
  fadeInDuration="300"
  moveDuration="650"
  color="0xffffff"/>

<mx:CurrencyFormatter id="usdFormatter"
  precision="0"
  currencySymbol="$"
  alignSymbol="left"/>

<mx:Canvas width="500"
   height="300">
<mx:Label x="10"
  y="10"
  text="Milk Chocolate"
  id="product"/>
<mx:Label x="10"
  y="36"
  text="10"
  id="price"/>
<mx:Button x="10"
   y="62"
   label="submit"
   click="addProduct();init()"/>
<mx:Button x="10"
   y="92"
   label="Change State"
   click="currentState='dark'"/>
<mx:Button x="10"
   y="122"
   label="Drinking Chocolate"
   click="currentState='spread'"/>
</mx:Canvas>

<mx:VBox width="340"
 height="340"
 horizontalAlign="center"
 verticalAlign="middle">

<ns2:transparentList id="products"
 width="300"
 height="300"
 dataProvider="{orderColl}"
 borderStyle="none"
 itemsChangeEffect="{dtle0}">
<ns2:itemRenderer>
<mx:Component>
<mx:HBox width="100%"
 height="100%"
 horizontalAlign="center"
 verticalAlign="middle"
 horizontalGap="0">
<mx:Image source="assets/trashcan.gif"
  click="outerDocument.deleteOrder()"/>
<mx:Label text="{data.Product}"
  styleName="orderLabel"/>
<mx:Spacer width="100%"/>
<mx:Label id="price"
  text="${Number(qty.text)* Number(oldPrice.text)}"
  styleName="orderLabel"/>
<mx:TextInput id="qty"
  width="30"
  height="20"
  text="1"
  styleName="qtyInput"/>

<mx:Label id="oldPrice"
  text="{data.Price}"
  visible="false"
  includeInLayout="false"/>
</mx:HBox>
</mx:Component>
</ns2:itemRenderer>
</ns2:transparentList>
<mx:HBox>
<mx:Label text="Total:"
  color="#FFFFFF"
  fontWeight="bold"/>
<mx:Label id="sum"/>
</mx:HBox>
</mx:VBox>

</mx:Application>

 
 


 

  

   



--
Alex Harui
Flex SDK Team
Adobe System, Inc.
http://blogs.adobe.com/aharui

__._,_.___
Recent Activity:
MARKETPLACE

Stay on top of your group activity without leaving the page you're on - Get the Yahoo! Toolbar now.

.

__,_._,___

0 comments:

Post a Comment