2011-08-25 16 views
0

我试图寻找一个类似的帖子,但找不到任何,因此张贴此查询为您的帮助。实质上,我有一个在GWT端创建的自定义UI。现在,我想将发生在GWT端的事件发送到javascript/jsp页面。为此,我想知道是否有方法让jsp/javascript在GWT代码中注册一个方法,并且在GWT端发生任何事件时,GWT java代码可以简单地调用此javascript方法(这就像一个函数指针/对象),并在jsp页面通知信息。尽管我可以直接从GWT代码中调用JavaScript方法,但是,这意味着GWT代码也需要知道JavaScript方法名称,并且这会导致紧密耦合。相反,javascript可以简单地将函数的句柄传递给GWT代码,该代码将简单地调用此句柄以传递jsp/javascript代码中的必要事件。任何想法都会非常有帮助。在GWT java代码中注册一个javascript方法,以便它可以基于GWT中的事件调用

回答

0

您可以使用Dictionary将函数名称传递给您的应用程序。

在JSP主页:

<script type="text/javascript"> 
    function myFunction() { 
    // Do stuff... 
    } 

    var MyDictionary = { 
    myCallback = "myFunction" 
    }; 
</script> 

而在你的应用程序:

public void onEvent(EventType event) { 
    Dictionary d = Dictionary.getDictionary("MyDictionary"); 
    invokeNativeCallback(d.get("myCallback")); 
} 

private native void invokeNativeCallback(String callbackName) /*-{ 
    if (typeof $wnd[callbackName] === "function") { 
    $wnd[callbackName](); 
    } 
}-*/; 
+0

非常感谢,贾森。这看起来像我正在寻找的方法,但我想知道有没有办法将Dictionary对象传递给GWT代码?我的意思是注册myDictionary变量,就像你在jsp页面中提到的那样,我们需要通过GWT端暴露的另一个JSNI方法注册它。我知道我们可以将原始数据类型从JavaScript传递到GWT,但是为了传递Dictionary对象,是否有特殊符号?非常感谢您的回复。 – ash1977

+0

'Dictionary'是从GWT到包含字符串值的全局JavaScript对象的桥梁。您不需要JSNI方法来获取字典,只需要变量的名称即可。没有办法直接通过顶层'onModuleLoad()'传递参数。 –

+0

哦,所以你提到我可以在任何本地方法中直接从GWT代码中访问全局myDictionary变量,然后像上面提到的那样使用它,或者你上面提到的代码可以没有任何修改就可以直接使用?再次感谢您在这里的帮助。 – ash1977

相关问题