GWT中的JSNI动态函数引用

GWT中的JSNI动态函数引用,gwt,jsni,Gwt,Jsni,我想从gwt调用任意js函数。函数名将位于functionname变量内。大概是这样的: private static native String execute(String functionName, JavaScriptObject data) /*-{ return $wnd.functionName(data); }-*/; private static native JavaScriptObject getFunction(String functionName)/*-{

我想从gwt调用任意js函数。函数名将位于functionname变量内。大概是这样的:

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

}-*/;
我假设这样的事情是可能的,但是如何创建fn变量来表示我的任意functionname函数呢

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

如果需要按名称调用函数,则需要执行以下操作:

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

}-*/;
要获得对函数的引用,您需要像这样使用JSNI:

private static native String execute(String functionName, JavaScriptObject data) /*-{
    return $wnd.functionName(data);
}-*/;
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函数存在:私有静态本机字符串执行(字符串functionName,JavaScriptObject data)/*-{return$wnd.my.function.name(data);}-*/;您使用的路径无效。函数名不应包含任何点。否则,您必须使用类似$wnd[“my”][“function”][“name”]();@Matija基本上这是完全有效的错误,因为$wnd onject没有任何名为的函数“my.function.name”。它只包含对象my,其中包含对象函数,其中包含函数名。谢谢。这解决了我的问题。函数名中的点是google闭包模板概念中名称空间的结果。