Мое приложение GWT не выполняет встроенную функцию от вызова JSNI.Любой берущий? - PullRequest
1 голос
/ 21 июня 2011

Я пытаюсь запустить нативную функцию Java из вызова JSNI в моем приложении GWT.Это выглядит примерно так:

package foo.client;

открытый класс AAA реализует EntryPoint, UIupdate {

public native void initChangeFunc() /*-{
    $wnd.jsChangeView = function () {

        this.@foo.client.AAA::changeToHistory();
        alert("got here");
    };
}-*/;
public void changeToHistory() {
    Window.alert("Hello World");
    //Change view here.
    this.changeView("history");
    this.changeHistoryView("bydate");
};

...

public void onModuleLoad() {

...

    this.initChangeFunc();
}

}

Присоединение вызова функции jsChangeView () к ссылке onclick () во внешнем интерфейсе и нажатие на нее приводит к появлению предупреждения «получено», но не предупреждение "Hello World", и другие две функции тоже не работают.GWT - это не моя область знаний, и это не мое приложение, поэтому я знаю, что мне здесь не хватает чего-то простого.Любой берущий?

1 Ответ

2 голосов
/ 21 июня 2011

this.@foo.client.AAA::changeToHistory() только ссылается на метод («указатель функции», если хотите, или, в JavaScript, просто «функция»), он не вызывает его. Вы должны написать this.@foo.client.AAA::changeToHistory()(), чтобы действительно сделать звонок.

Это более очевидно, когда метод имеет аргументы, например: this.@foo.client.AAA::changeToHistory(Ljava/lang/String;I) против this.@foo.client.AAA::changeToHistory(Ljava/lang/String;I)("foo", 3).

...