When working with repeaters, one good technique is to create a custom object, and repeat that. Pass into that component the entire dataProvider Item. It will make the repeater code much cleaner (no currentItem stuff), plus, if you also implement a getter for the item, you can access that in an event handler via the target property, no worrying about getRepeaterItem. Below is some sample code.
Tracy Goal: Display a list of items using a complex display for each item, and have each of those items behave like a menu element and respond to a click anywhere on the item by running a handler function. One solution is to use a Repeater with a custom component In the main app or component, declare the Repeater, and the click handler function. <mx:Application ... <mx:Script><![CDATA[ import MyRepeaterItem; ... private function onRPItemClick(oEvent:Event):void { var xmlItem:XML = XML(oEvent.target); }//onRPItemClick ]]></mx:Script> <mx:VBox ...> <mx:Repeater id="rp" dataProvider="{_xmlData}" ...> <!-- Note we pass in the entire currentItem, and define a click handler --> <MyRepeaterItem xmlItem="{rp.currentItem}" itemClick="onRPItemClick(event)" .../> </mx:Repeater </mx:VBox> </mx:Application> And in the component, MyRepeaterItem.mxml: <?xml version="1.0" encoding="utf-8"?> <mx:HBox mouseChildren="false" buttonMode="true" click="onClick(event)" > <!-- The metadata tag below allows us to define an itemClick handler in mxml, as in the code above --> <mx:Metadata> [Event(name="itemClick", type="flash.events.Event")] </mx:Metadata> <mx:Script><![CDATA[ [Bindable]private var _xmlItem:XML; /** Setter function */ public function set xmlItem(xml:XML):void { _xmlItem = xml; //do any special, non-bound ui stuff you want }//set xmlItem /** Getter function */ public function get xmlItem():XML { return _xmlItem; }//get xmlItem /** Outer VBox Click handler function */ private function onClick():void { dispatchEvent(new Event("itemClick",false); //we do not need/want this event to bubble }//onClick ]]></mx:Script> <!-- Now declare the Item UI --> <mx:Text id="lbDescription" text="[EMAIL PROTECTED]" width="100%" height="100%" /> </mx:HBox> ________________________________ From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of grimmwerks Sent: Saturday, April 19, 2008 10:28 AM To: flexcoders@yahoogroups.com Subject: Re: [flexcoders] naming children of repeater problem with xml Ah - think I might have a way around it with getRepeaterItem() click="Alert.show(String(event.currentTarget.getRepeaterItem()[EMAIL PROTECTED]) + ' pressed')" On Apr 19, 2008, at 10:12 AM, grimmwerks wrote: I've read this article on giving the id of a child the currentItem.Name of a repeater: http://www.adobe.com/devnet/air/flex/articles/xml_viewer_on_air_04.html <http://www.adobe.com/devnet/air/flex/articles/xml_viewer_on_air_04.html > The trouble is my xml is using attributes such as this: <circle type="work" x="100" y="300" percent="25" /> Now on the whole most of what I'm doing to get at attributes works EXCEPT for the id: <mx:Repeater id="rep" dataProvider="{CircleData.getInstance().currentCircle.circle}"> <mx:Button x="{Number([EMAIL PROTECTED])}" y="{Number([EMAIL PROTECTED])}" width="{(Number([EMAIL PROTECTED])*defaultSize)}" height="{(Number([EMAIL PROTECTED])*defaultSize)}" styleName="{String([EMAIL PROTECTED])}" label="{String([EMAIL PROTECTED]).toUpperCase()}" useHandCursor="{CircleData.getInstance().isEdit}" buttonMode="{CircleData.getInstance().isEdit}" mouseMove="mouseMoveCircle(event);circleOffsetClick(event)" toolTip="{'At the moment '+ String([EMAIL PROTECTED])+' is '[EMAIL PROTECTED]'% of my life at the moment'}" addedEffect="blur" /> </mx:Repeater > I can't get the currentItem type and making that the id by id="{String([EMAIL PROTECTED])}" I can't even 'fake it' with the currentIndex or anything: id="{String(rep.currentIndex)}". Is there any way around this?