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
>> >>
>> >>
>>
>>
>

Reply via email to