I uncommented that line from your code before and did see the error. And I agree that there are two event listeners now. If all you want to do is replace the old event listener with a new one, you can still listen for a state change event and in the event handler, manually remove the old listener and add the new event listener.
this.addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, handleStateChange); in the handleStateChange, you can check what the new state is and add/remove event listeners accordingly. --- In [email protected], "mydarkspoon" <[EMAIL PROTECTED]> wrote: > > Hi, > first of all, thanks for the reply, I had a piece of my main app code > commented, so if you just copied and paste it, you won't see the bug > immediately, sorry, the fixed code is bellow. > > I tried to use actionscript addEventListener, yet, the problem with > this approach is that SetEventHandlet purpose is to replace the > handling function, however, it won't unregister actionscript event > listeners, so the error won't show up but now we'll have 2 listeners > instead of 1. > > The good code (still with the bug): > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > layout="absolute" xmlns:local="*" creationComplete="init()"> > <mx:Script> > <![CDATA[ > import mx.controls.Alert; > > private function onClick1(evt:Event):void > { > Alert.show("chnaging from state 1 to state 2"); > currentState = "myState" > } > > private function onClick2():void > { > Alert.show("state 2"); > } > ]]> > </mx:Script> > > <mx:states> > <mx:State name="myState"> > <mx:SetEventHandler target="{bt}" handler="onClick2()" > name="goPrevious" /> > </mx:State> > </mx:states> > <local:MyButton id="bt" goPrevious="onClick1(event)" /> > </mx:Application> > > > Thanks a lot, > > Almog Kurtser > > > > > --- In [email protected], "rueter007" <rueter007@> wrote: > > > > Hey, > > > > I ran your code and I could reproduce the error you got. It seems like > > a bug in the SetEventHandler code. However, if you add the initial > > event listener in actionscript, it all works fine. > > > > private function init():void > > { > > trace(document.toString()); > > bt.addEventListener("change", onClick1); > > } > > > > - venkat > > http://www.venkatj.com > > > > > > --- In [email protected], "mydarkspoon" <mydarkspoon@> wrote: > > > > > > Hi, > > > > > > I encountered an error using the SetEventHandler and made a simple > > > test case to see what was the problem: > > > In my app I have a component that contains button and dispatches a > > > "goPrevious" event when the component::button is clicked. > > > Following the "goPrevious" event, the main app changes its state. The > > > new state uses the SetEventHandler to change the "goPreviousHandler": > > > > > > My main app: > > > <?xml version="1.0" encoding="utf-8"?> > > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > > layout="absolute" xmlns:local="*" creationComplete="init()"> > > > <mx:Script> > > > <![CDATA[ > > > import mx.controls.Alert; > > > > > > private function init():void > > > { > > > trace(document.toString()); > > > } > > > private function onClick1(evt:Event):void > > > { > > > Alert.show("chnaging from state 1 to state 2"); > > > currentState = "myState" > > > } > > > > > > private function onClick2(evt:Event):void > > > { > > > Alert.show("state 2"); > > > } > > > ]]> > > > </mx:Script> > > > > > > <mx:states> > > > <mx:State name="myState"> > > > <mx:SetProperty target="{bt}" name="alpha" value="0.2" / > > > <!--<mx:SetEventHandler target="{bt}" > > > handlerFunction="onClick2" > > > name="goPrevious" /> --> > > > </mx:State> > > > </mx:states> > > > <local:MyButton id="bt" goPrevious="onClick1(event)" /> > > > <!--<mx:Button id="bt" click="onClick1()" /> --> > > > </mx:Application> > > > > > > --------------------------------------------------------------- > > > The Component: > > > > > > <?xml version="1.0" encoding="utf-8"?> > > > <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100" > > > height="100" > > > click="onClick()" creationPolicy="auto" > > > > <mx:Metadata> > > > [Event(name="goPrevious", type="events.NavigationEvent")] > > > </mx:Metadata> > > > > > > <mx:Script> > > > <![CDATA[ > > > import events.NavigationEvent; > > > > > > private function onClick():void > > > { > > > dispatchEvent(new > > > NavigationEvent(NavigationEvent.GO_PREVIOUS)); > > > } > > > ]]> > > > </mx:Script> > > > <mx:Button label="previous" click="onClick()" /> > > > </mx:VBox> > > > > > > > > > > > > And this is the error you get from the SetEventH/handler object: > > > > > > ReferenceError: Error #1069: Property __bt_goPrevious not found on > > > MyButton and there is no default value. > > > at mx.states::SetEventHandler/apply() > > > > > > > > > It seems that inside the SetEventHandler.apply() function it can't > > > find the oldHandlerFunction. > > > > > > > > > I'm struggling this bug for hours now and been goggling it a lot, yet > > > nothing useful was found... > > > > > > I'd be grateful if anyone take a look at that. > > > > > > Thanks in advance, > > > Almog Kurtser > > > > > >

