Hey Laurence,
Time for some remedial training :)
protected function button1_clickHandler(event:MouseEvent):void
{
trace("button1_clickHandler");
var fees:Number = 0;
for each ( var o:Object in FeeForm1.getChildren()){
trace(o);
if ( o is TextInput){
trace(TextInput(o).text)
fees += Number(TextInput(o).text);
}
}
FeeTot.text = fees.toString();
// TODO Auto-generated method stub
}
On Mar 1, 2011 6:36pm, Laurence MacNeill <[email protected]> wrote:
Hadn't thought about using a DataGrid -- interesting point you've brought
up here, and I will check it out, thanks...
I did finally find what I was looking for -- className is the property I
was needing to carry out what I was trying to do before. It comes back as
a string that is the "type" of object I was looking at... My nomenclature
was incorrect -- I was dealing with Classes, not Types, and that's why my
Google searches didn't work. LOL
But thanks for your suggestion -- I will definitely give that a whirl.
L.
On Tue, Mar 1, 2011 at 6:19 PM, Charlie Hubbard
[email protected]> wrote:
If I had to guess what you're doing I'd say a DataGrid would serve your
purpose much more efficiently than what your doing. Also looks like you
don't have proper separation from your data model and your UI which is
going to lead to code like what you have posted. Your model can carry the
dynamic fees and charges that belong in them. Right now your UI is
tightly coupled to your data model. In fact your UI IS your data model.
If you ever wanted to change the data model or UI you have to rewrite
everything. DataGrid will add rows as your model adds entries.
Use ItemRenders and ItemEditors to handle editing those values and
rendering the values from your model. Renderers are good for adding
things like '$' and ensuring the result has 2 decimal places. Editors
will allow you to edit the value in the DataGrid.
Something like the following will help your issue a lot.
class Fee {
public var name : String;
public var amount : Number;
}
class Bill {
public var fees : ArrayCollection = new ArrayCollection();
public get totalAmount() : Number {
var amount : Number = 0.0;
for each( var fee in fees ) {
amount += fee.amount;
}
return amount;
}
}
var bill : Bill = new Bill();
bill.fees.add( new Fee( 8.95, 'Monthly Charge' ) );
bill.fees.add( new Fee( 15.95, 'Service Charge' ) );
bill.fees.add( new Fee( 2.95, 'Taxes' ) );
dataGrid.dataProvider = bill.fees;
totals.text = String( bill.totalAmount );
Now Bill represents the abstract concept of a series of charges. It
contains the data so you don't need to go back into the UI and look
through components trying to piece back together what the bill is. When
you do this it's easy to utilize the Bill class to perform operations
like what you're trying to do.
Charlie
On Tue, Mar 1, 2011 at 6:04 PM, Laurence MacNeill [email protected]>
wrote:
I have several Canvases in a VBox, and inside those Canvasses might (or
might not be) one or more dynamically-created TextInputs, which are
displaying fee-amounts in them. When someone clicks on the TextInput and
changes the fee-amount, I want to go through all the TextInput's in that
particular canvas and total up the fees displayed in all the TextInputs
in that Canvas...
Easy enough, right? Set a 'change' event listener and use
Canvas(event.currentTarget.parent).numChildren to loop thru all the
children in that canvas...
Problem I'm having is that I don't know how to tell what type of child
I'm looking at -- like if it's a Label, for example, I just want to
ignore it in that loop. So how do I tell what type of object it is?
Here's an example of my code:
private function feeAmountChanged(event:Event):void {
var totalFees:Number = 0;
var tempCanvas:Canvas = Canvas(event.currentTarget.parent);
for (var i:int=0; i
//Here's where I don't know what to do -- how do I say something like the
following:
if (tempCanvas.getChildAt(i) is a TextInput) {
//Do my summing here, adding it to totalFees
}
}
//place the amount contained in totalFees in the appropriate box down
below -- unimportant to this discussion right now
}
I know this is a simple, stupid thing. But I just can't figure it out. LOL
Thanks,
Laurence MacNeill
Mableton, Georgia, USA