我正在使用SmartGWT,我希望com.smartgwt.client.Version从JavaScript 访问.在Firefox的Web控制台中,我尝试过:
frames[0].$entry(Lcom_smartgwt_client_Version::getVersion()));
和
frames[0].$entry(@com.smartgwt.client.Version.getVersion());
和
frames[0].$entry(@com.smartgwt.client.Version::getVersion());
和
frames[0].$entry(@com.smartgwt.client.Version::getVersion()());
但所有这些都返回语法错误.
我的WAR部署了SmartGWT,我可以看到其他的SmartGWT类frames[0].
调用此静态Java方法的正确语法是什么?
除了java文件中的JSNI代码之外,这些JSNI引用不起作用.JSNI中对Java方法和字段的引用实际上并不是有效的JavaScript,而是JSNI语言的一部分,它使这些本机方法都能使用Java和JavaScript.JSNI字符串@com.smartgwt.client.Version::getVersion()()将被重写为类似于$getVersion1()PRETTY的东西,或者在OBF模式下只有一两个字符的长度,因此您不能依赖该方法名称相同.
相反,您需要从应用程序内部导出JavaScript函数,以便此外部JavaScript可以调用它.有关详细信息,请访问https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#calling.
以下是您的应用程序中的外观示例:
public native void exportGetVersion() /*-{
$wnd.getSmartGwtVersion = $entry(function() {
return @com.smartgwt.client.Version::getVersion()();
});
}-*/;
Run Code Online (Sandbox Code Playgroud)
确保你在你的应用程序中调用此函数来导出函数 - 在调用之后的任何时候,你可以getSmartGwtVersion()从常规JavaScript 调用- 不需要使用frames或$entry.
| 归档时间: |
|
| 查看次数: |
1912 次 |
| 最近记录: |