Hi Alex, Thanks, that worked. I was assuming it to behave more like a DOM structure where once I add something to the structure the access by id should work. From your another post I figured out that an id is equivalent to a reference name in ActionScript. Probably, as the other dynamically generated textboxes did not have references in the main mxml, so this[$id] was not working for them.
Regards, Gaurav --- In [email protected], "Alex Harui" <[EMAIL PROTECTED]> wrote: > > Every time you create something with an id from actionscript, save it in > a central dictionary. Then you only have to scan the dictionary. > > ________________________________ > > From: [email protected] [mailto:[EMAIL PROTECTED] On > Behalf Of gaurav1146 > Sent: Thursday, November 29, 2007 7:31 AM > To: [email protected] > Subject: [flexcoders] Re: Accessing Components By Dynamically generated > IDs > > > > I was wondering if there was a by which I could access the componets > directly using ids without iterating through all the children. I > observed that the components that were present directly in the mxml > can be accessed using this[$id] but the components that I am adding > later using actionscript cannot be accessed using this[$id]. > > I have a main application which takes as input, name value pairs from > users. Initially I show only two pairs of textboxes with ids as > (field1,value1 and field2,value2). The user can add more textboxes by > clicking on "Add Input" button which adds a component comprising of > two textboxes with ids as field<i> and value<i>. When the user clicks > on showAllFields() I try to iterate through all the field textboxes > using this['field'+i]. The problem is that the main application is > only able to access the first two textboxes that were present in the > mxml earlier and is not able to acccess any of the textboxes that were > added dynamically using ActionScript. Here is my code which consists > of the main mxml file and component file. > > ----------- Main MXML file ----------------- > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml > <http://www.adobe.com/2006/mxml> " > layout="absolute"> > <mx:Script> > <![CDATA[ > public var numInputs:Number=2; > public function addInputs():void{ > var tbi:TextboxInput = new TextboxInput(); > parentBox.addChild(tbi); > numInputs++; > var parentHBox:HBox = tbi.getChildByName("hbox") as HBox; > parentHBox.id = "hbox" + numInputs; > (parentHBox.getChildByName("field") as TextInput).id = "field" + > numInputs; > (parentHBox.getChildByName("value") as TextInput).id = "value" + > numInputs; > } > public function showAllFields():void{ > var str:String; > for(var i:Number = 1; i< numInputs + 1; i++){ > if(i == 1){ > str = this['field'+i].text; > } > else{ > str += ","+this['field'+i].text; > } > } > mx.controls.Alert.show(str); > } > ]]> > </mx:Script> > <mx:VBox> > <mx:VBox id="parentBox"> > <mx:HBox id="hbox1"> > <mx:TextInput id="field1"/> > <mx:TextInput id="value1"/> > </mx:HBox> > <mx:HBox id="hbox2"> > <mx:TextInput id="field2"/> > <mx:TextInput id="value2"/> > </mx:HBox> > </mx:VBox> > <mx:Button click="addInputs()" label="Add Input"/> > <mx:Button click="showAllFields()" label="Show all fields"/> > </mx:VBox> > </mx:Application> > > -------------Component File (TextboxInput.mxml) ------------- > > <?xml version="1.0" encoding="utf-8"?> > <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml > <http://www.adobe.com/2006/mxml> "> > <mx:HBox name="hbox"> > <mx:TextInput name="field"/> > <mx:TextInput name="value"/> > </mx:HBox> > </mx:Canvas> > > ---------------------------------------------------------- > > Any pointers on what could the issue be would be greatly appreciated. > > Regards, > Gaurav > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> > , "Rafael Faria" > <rafaelfaria.grupos@> wrote: > > > > I got the same problem... and solve with this function > > > > > > function $(object:String,container:DisplayObjectContainer = null) { > > if (container == null) container = this; > > > > for (var i:uint=0; i < container.numChildren; i++) > > { > > var child:DisplayObject = container.getChildAt(i); > > > > if (child.name== object) { > > return child; > > } > > > > if (container.getChildAt(i) is DisplayObjectContainer) > > { > > var obj = $(object,DisplayObjectContainer(child)); > > if (obj is DisplayObject) { > > return obj; > > } > > } > > } > > } > > > > > > > > > > try $('element name') > > > > > > > > > > --- In [email protected] > <mailto:flexcoders%40yahoogroups.com> , DreamCode <dreamcode@> wrote: > > > > > > I think you should be able to constuct the id something like this: > > > > > > var currentItem:Object = this['hbox' + number] > > > > > > I assume you know the number of boxes you create..... > > > > > > --Allan > > > > > > On Nov 21, 2007 11:49 PM, gaurav1146 <gaurav1146@> wrote: > > > > > > > > > > > > > > > > > > > > Hi, > > > > I have a component where a user can add text boxes and Combo boxes > > > > depending on his requirement. For each addition I assign the ids > to > > > > the elements in ascending order. Now I want to read the values > from > > > > each of these textboxes and combo boxes in a for loop. How can I > do > > > > that. I have a structure something like: > > > > > > > > <mx:VBox> > > > > <mx:HBox id="hbox1"> > > > > <mx:Textbox id="textbox1"/> > > > > <mx:ComboBox dataProvider="{dp}" id="comboBox1"> > > > > <mx:HBox> > > > > > > > > <mx:HBox id="hbox2"> > > > > <mx:Textbox id="textbox2"/> > > > > <mx:ComboBox dataProvider="{dp}" id="comboBox2"> > > > > <mx:HBox> > > > > <!--Next HBox would be added here with id="hbox3" and so on --> > > > > <mx:Button click="addHbox()"> > > > > </mx:VBox> > > > > > > > > Had the number of HBoxes been fixed I could access them by > > > > {hboxId.textboxid.text} but I can't do the same for dynamically > > > > generated ids. I tried using getChildByName but that was not > working > > > > for me. Is there any function where I can get a component by > supplying > > > > its id(like Javascript's getElementById)? > > > > > > > > TIA, > > > > Gaurav > > > > > > > > > > > > > >

