如何从gwt调用jquery触发器?
Posted
技术标签:
【中文标题】如何从gwt调用jquery触发器?【英文标题】:How to call jquery trigger from gwt? 【发布时间】:2011-01-19 23:04:02 【问题描述】: public static native void doConnect() /*-
$wnd.jQuery(document).trigger('connect',
jid: 'sss',
password: 'sss'
);
-*/;
我尝试了上述方法,但在 firebug 或 gwt 托管模式下没有错误 控制台(所以我不知道代码是否成功)。我可以知道这是调用 jquery 触发器的正确方法吗?但是当我将 alert() 放入 bind('connect') 时,它没有被调用
.js 文件内
$(document).bind('connect', function (ev, data)
alert('not call.....at all');
var conn = new Strophe.Connection(
"http://bosh/xmpp-httpbind");
conn.connect(data.jid, data.password, function (status)
if (status === Strophe.Status.CONNECTED)
$(document).trigger('connected');
else if (status === Strophe.Status.DISCONNECTED)
$(document).trigger('disconnected');
);
Hello.connection = conn;
);
【问题讨论】:
【参考方案1】:在使用带有 GWT 的 jQuery UI 时,我遇到了类似的问题 - 在控制台/开发模式下没有错误,但代码的行为不像我想要的那样。原因是 jQuery(和此类框架)扩展/更改了 javascript 的许多核心元素并期望它保持这种状态 - 但是,GWT 代码(也就是 JSNI 的东西)是从“干净”的 iframe 执行的(因此没有外部框架可能会混淆语言并在 GWT 中导致一些奇怪的错误,这就是为什么您必须通过 $wnd
引用主窗口的原因。
我建议将您的 doConnect
函数移动到主机页面(或链接到主机页面的外部 js 文件),而只需从您的 JSNI 存根调用该函数:
public static native void doConnect() /*-
$wnd._doConnect('sss','sss'); //_doConnect defined in the host page
-*/;
或者提供从主机页面返回数组等的辅助函数,以便它们包含 jQuery 所做和期望的所有更改。
【讨论】:
【参考方案2】:这个答案有点晚了,但是由于一个简单的错误,您的原始代码无法正常工作:您已经正确使用 $win
而不是 window
但几个字符之后您使用 document
而不是 @ 987654324@:)
public static native void doConnect() /*-
$wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect',
jid: 'sss',
password: 'sss'
));
-*/;
【讨论】:
以上是关于如何从gwt调用jquery触发器?的主要内容,如果未能解决你的问题,请参考以下文章
Google Web Toolkit (GWT) EventBus 事件触发/处理