以下是访问JS方法的常用方法:
public class JSNIHelper {
public static native void errorNotify(String _title, String _text) /*-{
$wnd.$.pnotify({
title: _title,
text: _text,
type: 'error'
})
}-*/;
}
然而,在JSNI之上有一个“对象包装器”以更加Java对象的方式访问Javascript:
JSNIWrapper().call("$").method("pnotify")
.set("title", title)
.set("text", text)
.set("type", type).now();
我不完全确定什么是最好的实现,我不是JS专家。所以我的问题是,是否存在任何现有的JSNI对象包装器?
答案 0 :(得分:1)
gwtquery是GWT的一个很好的补充,它有很多助手,可以在不编写jsni等的情况下促进与javascript的交互。
在您的情况下,您的代码可能类似于:
// Create a JSO and set the properties
Properties p = Properties.create();
p.set("title", title);
p.set("text", text);
p.set("type", type);
// Get the JSO which has the function we want to call
JavaScriptObject $ = JsUtils.prop(window, "$");
// Call the JS method and get the result (null if the native
// js function returns void
Object ret = JsUtils.runJavascriptFunction($, "pnotify", p);
BTW:您提出的链接语法非常有意义,因此您可以将此功能作为gquery Properties对象的增强功能提出。类似的东西:
$$().set("title", title).set("text", text).set("type", type).call(window, "$.pnotify");