【问题标题】:JSNI dynamic function reference in GWTGWT中的JSNI动态函数引用
【发布时间】:2012-01-24 13:15:24
【问题描述】:

我想从 gwt 调用任意 js 函数。函数名称将在函数名称变量内。像这样的:

private static native String execute(String functionName, JavaScriptObject data) /*-{
    return $wnd.functionName(data);
}-*/;

我认为这样的事情是可能的,但是如何创建 fn 变量来表示我的任意 functionname 函数。

private static native String execute(JavaScriptObject fn, JavaScriptObject data) /*-{
    return fn(data);
}-*/;

【问题讨论】:

    标签: gwt jsni


    【解决方案1】:

    如果你需要通过名字调用函数,你需要做这样的事情:

    private static native String execute(String functionName,JavaScriptObject data)/*-{
         $wnd[functionName](data);
    
    }-*/;
    

    要获得对函数的引用,您需要像这样使用 JSNI:

    private static native JavaScriptObject getFunction(String functionName)/*-{
        return  $wnd[functionName];
    
    }-*/;
    

    【讨论】:

    • com.google.gwt.core.client.JavaScriptException: (TypeError): 对象 [object DOMWindow] 的属性“my.function.name”不是 com.google.gwt.dev 的函数.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:248) 有什么建议吗?
    • 顺便说一句,直接调用有效,所以js函数存在:private static native String execute(String functionName, JavaScriptObject data) /*-{ return $wnd.my.function.name(data); }-*/;
    • 您使用的路径无效。函数名称不应包含任何点。否则你将不得不使用类似 $wnd["my"]["function"]["name"]();
    • @Matija 基本上这是完全有效的错误,因为 $wnd onject 没有任何名为“my.function.name”的函数。它只包含对象my,其中包含对象function,其中包含函数名称。
    • 谢谢。这解决了我的问题。函数名中的点是谷歌闭包模板概念中命名空间的结果。
    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 2014-04-26
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多