Проблема с вызовом метода экземпляра из рукописного javascript

Может ли кто-нибудь помочь с тем, что не так в приведенном ниже коде (на основе ответов на аналогичный вопрос, заданный на 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)
            });
    }-*/;

Проблема в том, что Javascript не находит jsFunction: alert(jsFunction) в коде Javascript возвращает значение «undefined».

Спасибо.

Редактировать: Ха, через час: понял, что мне просто нужно было вернуть that.@com...!


person srini1998    schedule 13.03.2012    source источник
comment
Итак, на ваш вопрос ответили? Если да, то ответьте на свой вопрос, пожалуйста.   -  person Peter    schedule 13.03.2012


Ответы (1)


Ага, через час: понял, что мне просто нужно вернуть that.@com...!

Метод моста должен быть:

public native void defineBridgeMethod() /*-{ 
    var that = this;
    $wnd.jsFunction= $entry(function(msg) {
             return [email protected]::javaMethod(Ljava/lang/String;)(msg)
        });
}-*/;
person srini1998    schedule 15.03.2012
comment
Я не понимаю, что на самом деле делает var this = that, но это работает, а this.@... нет. - person Dr. Max Völkel; 20.06.2013
comment
Это как-то связано с областью видимости. this внутри этой функции отличается от вне функции. Вы можете обойти это, назначив внешний this переменной, которая также видна в операторе функции. - person PAX; 29.04.2021