Issue with calling instance method from handwritten javascript
Asked Answered
E

1

0

Can anyone help with what is wrong in the code below(based on the answers to a similar question asked on SO):

    public String javaMethod(String input) {
        return "it works";
}

    public native void defineBridgeMethod() /*-{ 
        var that = this;
        $wnd.jsFunction= $entry(function(msg) {
                 [email protected]::javaMethod(Ljava/lang/String;)(msg)
            });
    }-*/;

The issue is that Javascript does not find jsFunction: alert(jsFunction) in Javascript code returns 'undefined'.

Thanks.

Edit: Huh, one hour later: figured out that I just needed to have that.@com... returned!

Erlene answered 13/3, 2012 at 0:59 Comment(1)
So your question is answered? If so, answer your own question please.Originality
E
2

Huh, one hour later: figured out that I just needed to have that.@com... returned!

The bridge method should be:

public native void defineBridgeMethod() /*-{ 
    var that = this;
    $wnd.jsFunction= $entry(function(msg) {
             return [email protected]::javaMethod(Ljava/lang/String;)(msg)
        });
}-*/;
Erlene answered 15/3, 2012 at 23:40 Comment(2)
I don't get what "var this = that" really does, but it works - while this.@... does not.Craving
It has something to do with scoping. this within that function is another one than outside the function. You circumvent that by assigning the outer this to a variable which is also "visible" within the function statement.Incondite

© 2022 - 2024 — McMap. All rights reserved.