Good point. We’ll have to create a mechanism that saves closures so you don’t have to do it yourself. Maybe Mike already did this once.
-Alex On 7/14/15, 4:55 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: >Darn. Now I ran into the issue where removing an event listener doesn't >work because goog.bind() returns a different function every time that it >is >called. > >Looks like I will need to go with my original workaround for now. I can >put >this in the constructor to make it work the way that I expect: > >this["simpleButton_mousedownHandler"] = >this.simpleButton_mousedownHandler.bind(this); >this.addEventListener("mousedown", this.simpleButton_mousedownHandler); > >Storing the function returned by bind() on the instance will give it >precedence over the one from the prototype. It would be cool if I could >make the emitter do that automatically for all functions on an instance of >a class. > >- Josh > > >On Tue, Jul 14, 2015 at 4:33 PM, Josh Tynjala <joshtynj...@gmail.com> >wrote: > >> That worked! I thought I had tried that. I don't usually use "this." >>when >> adding event listeners in ActionScript. I guess I was thinking too much >> about how it would be converted to JavaScript or something. I must have >> thought it would help the compiler. Haha! >> >> - Josh >> >> >> On Tue, Jul 14, 2015 at 4:11 PM, Alex Harui <aha...@adobe.com> wrote: >> >>> Bummer. >>> >>> Did you try: >>> >>> this.addEventListener("mousedown", simpleButton_mousedownHandler); >>> >>> The “this.” might be creating a pattern that isn’t handled. I’m sort >>>of >>> hoping Mike will finish his mother-in-law’s bathroom and find time to >>> start in on some way to pass context so we don’t have to one-off these >>> patterns. >>> >>> -Alex >>> >>> On 7/14/15, 3:50 PM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: >>> >>> >Alex, >>> > >>> >The change you made worked for the case where the function is >>>assigned to >>> >a >>> >variable, but it doesn't account for the function being passed as an >>> >argument to a function. >>> > >>> >This still doesn't work for me: >>> > >>> >this.addEventListener("mousedown", >>>this.simpleButton_mousedownHandler); >>> > >>> >However, as a workaround, I can do this, for now: >>> > >>> >var mouseDownListener:Function = this.simpleButton_mousedownHandler; >>> >this.addEventListener("mousedown", mouseDownListener); >>> > >>> >- Josh >>> > >>> >On Sun, Jun 28, 2015 at 10:13 PM, Alex Harui <aha...@adobe.com> wrote: >>> > >>> >> >>> >> >>> >> On 6/28/15, 2:21 PM, "Michael Schmalle" <teotigraphix...@gmail.com> >>> >>wrote: >>> >> >>> >> >On Sun, Jun 28, 2015 at 5:17 PM, Josh Tynjala >>><joshtynj...@gmail.com> >>> >> >wrote: >>> >> > >>> >> >> Yes, that is correct. >>> >> >> >>> >> >> In case it wasn't obvious, event listeners are the typical use >>>case >>> >> >>where >>> >> >> you'd pass a reference to a member function somewhere else where >>>a >>> >> >> reference needs to be saved in a variable. AS3 made this easy by >>> >> >> automatically binding member functions. JavaScript usually >>>requires >>> >>some >>> >> >> manual intervention to get event listeners to be called with the >>> >>right >>> >> >> scope. >>> >> >> >>> >> > >>> >> >Yeah the compiler does this already for anonymous functions, it >>> >>creates a >>> >> >self var pointing to 'this' and then uses self in the anonymous >>> >>function's >>> >> >body. >>> >> >>> >> Actually, that ‘self’ stuff is for AS lexical scoping. Josh is more >>> >> interested in the use of goog.bind for function identifiers. >>>FalconJX >>> >> handles that correctly in most cases for addEventListener and other >>> >> callbacks, but I guess we don’t handle this scenario. >>> >> >>> >> I can try to take a look at it, but if you want to, search for >>> >>GOOG_BIND. >>> >> >>> >> > >>> >> >I wasn't aware of this problem though, can you create a JIRA >>>ticket? I >>> >> >probably will be the one that tackles it since I am sure Alex >>>doesn't >>> >>have >>> >> >time to do something like this and test it as well. >>> >> >>> >> Well, I can probably get it working, but I’m sure I won’t test it as >>> >>well >>> >> as you will. >>> >> >>> >> -Alex >>> >> >>> >> >>> >>> >>