帮助通过JSNI调用传递复杂对象以绕过静态作用域

Help passing a complex object via a JSNI call to get around static scope

本文关键字:对象 静态 作用域 复杂 JSNI 调用 帮助      更新时间:2023-09-26

所以我有一个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。因为我的参数类型签名(Lblah.package.Foo部分)是错误的。

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

首先,尽量不要打断调用Foo::doSomething的行,并检查它是否有帮助。