> I don't think you can add a listener to Repeater. Yes you can; a Repeater dispatches 'repeatStart', 'repeat', and 'repeatEnd' events. But that's different from listening to events disaptched by the repeated components. - Gordon
________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Tracy Spratt Sent: Tuesday, September 04, 2007 1:53 PM To: [email protected] Subject: RE: [flexcoders] How do I addEventListener to a repeated component. I don't think you can add a listener to Repeater. That does not really make sense anyway, as repeater has no UI of its own, it only adds children to a container. The listeners need to be on the repeated components (checkBoxes). You can do this in mxml fairly easily, but you have to use getRepeaterItem() to get a reference to the item. currentItem will not work in an event handler declaration. When working with Repeater, I suggest using a custom component. It simplifies many things. Below are some snippets. 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: [email protected] <mailto:flexcoders%40yahoogroups.com> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> ] On Behalf Of Mark Sent: Tuesday, September 04, 2007 1:20 PM To: [email protected] <mailto:flexcoders%40yahoogroups.com> Subject: [flexcoders] How do I addEventListener to a repeated component. My code is below. I'm trying to put an eventListener on the CheckBoxes (repSL) that are being created with the Repeater. I get this error: TypeError: Error #1006: addEventListener is not a function this works fine with everything but for the repeated checkboxes. Is there a differnt way to assign this? Thanks <?xml version="1.0"?> <!-- repeater\myComponents\CustButton.mxml --> <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> " initialize="createListener()" paddingLeft="5" paddingTop="5" paddingRight="5" paddingBottom="5"> <mx:Script> <![CDATA[ import mx.events.ListEvent; import mx.core.Application; import mx.events.ListEvent; import flash.events.Event; [Bindable] public var dpSL:Array=["All","AABS","CBS","TAS","TAX"]; [Bindable] public var dpDI:Array=["Desktop Impact","Network Impact","Local Help Desk Impact","Other"]; [Bindable] public var dpDO:Array=["All","Global IT","Americas","Central Europe","Continental Western Europe","NEMIA","Far East","Oceania","Japan"]; // [Bindable] public var dpApp:Array=[{label:"Select One",data:"All"}, {label:"App Infrastructure",data:"Application Infrastructure"}, {label:"Client Conn",data:"Client Connectivity"}, {label:"Doc Mgmt",data:"Document Management"}, {label:"Finance",data:"Finance"}, {label:"People",data:"People"}, {label:"Q&RM",data:"Q&RM"}, {label:"SL App Services",data:"Service Line Application Services"} ]; [Bindable] public var dpInfra:Array=[{label:"Select One",data:"All"}, {label:"Content Mgmt",data:"Content Management"}, {label:"Data Networking",data:"Data Networking"}, {label:"Desktop",data:"Desktop"}, {label:"Identity & Access Mgmt",data:"Identity and Access Management"}, {label:"Info Security",data:"Information Security"}, {label:"Msg and Collab",data:"Messaging and Collaboration"}, {label:"Mobility and Comm",data:"Mobility and Communications"}]; // // private function createListener():void { repSL.addEventListener(MouseEvent.CLICK, myClickHandler, false, 0); infraRB.addEventListener(MouseEvent.CLICK, myClickHandler,false, 0); appCB.addEventListener(ListEvent.CHANGE,setFilter,false,0); infraCB.addEventListener(ListEvent.CHANGE,setFilter,false,0); } private function myClickHandler(e:MouseEvent):void { trace(e.target.label); var myTarget:String = e.target.label; if (myTarget == "Application") { appCB.enabled = true; infraCB.enabled = false; infraCB.selectedIndex = 0; } else { infraCB.enabled = true; appCB.enabled = false; appCB.selectedIndex = 0; } } ... <mx:Tile direction="horizontal" borderStyle="none" width="100%" horizontalGap="5" verticalGap="5" paddingTop="5" paddingBottom="5"> <mx:Repeater id="rSL" dataProvider="{myACSL}"> <mx:CheckBox id="repSL" label="{rSL.currentItem}" selected="true" change="Application.application.getRegions(event);Application.applicatio n.refresh();" /> </mx:Repeater> </mx:Tile>

