如何从gwt调用jquery触发器?

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; }); 

在使用带有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 }-*/; 

或者提供将从主机页面返回Arrays等的辅助函数,以便它们包含jQuery所做的和期望的所有更改。

对于这个答案来说有点晚了,但由于一个简单的错误,你的原始代码无法正常工作:你已经正确使用了$win而不是window但是后来你使用了几个字符而不是$doc 🙂

 public static native void doConnect() /*-{ $wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', { jid: 'sss', password: 'sss' })); }-*/;