Помогите передать сложный объект через вызов JSNI, чтобы обойти статическую область видимости - PullRequest
0 голосов
/ 11 июля 2011

Итак, у меня есть приложение GWT, и я пытаюсь вызвать функцию, чтобы изменить вид приложения с внешней кнопки. Обычно это вызывается как this.internalFunction ('string') ". Проблема в том, что JSNI работает через статические методы, и поэтому рассматриваемый объект теряется. Решение: передать сам объект приложения в вызов JSNI и вызвать оттуда вызовы функций этого объекта! Проблема к решению: это не работает. (

Класс выглядит примерно так:

package blah.package;
public class Foo implements A, B {
    public native void initChangeFunc() /*-{
        $wnd.jsChangeView = $entry(this.@blah.package.Foo::doSomething
            (Lblah.package.Foo;)(this));
            //Pass this to the function call to do calls on app object
    }-*/;
    public void doSomething(Foo obj) {
        //Change view here.
        obj.internalFunction("parameter");
    };
    public void internalFunction(String param) {
        //Do stuff with param.
    }
}

При загрузке модуля вызовите initChangeFunc () и получите доступ к jsChangeView () на самой странице.

Ошибки компиляции указывают на то, что компилятор не может найти blah.package.Foo, и это потому, что моя подпись типа параметра (часть Lblah.package.Foo) неверна.

[ERROR] Line 64: Expected a valid parameter type signature in JSNI method reference

1 Ответ

0 голосов
/ 06 марта 2012

Во-первых, постарайтесь не прерывать строку, вызывающую Foo::doSomething, и проверьте, помогает ли это.

...