public static native void doConnect() /*-{
$wnd.jQuery(document).trigger('connect',
{
jid: 'sss',
password: 'sss'
}
);
}-*/;
我尝试了上述内容,但在firebug或gwt托管模式中没有错误 控制台(所以我不知道代码是否成功)。我可以知道这是调用jquery触发器的正确方法吗?但是当我把alert()放在bind('connect')中时,它没有被调用
$(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;
});
答案 0 :(得分:12)
在使用带有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所做的和期望的所有更改。
答案 1 :(得分:4)
这个答案有点晚了,但由于一个简单的错误,你的原始代码无效:你已经正确使用了$win
而不是window
但是后来你使用了document
几个字符$doc
1}}而不是public static native void doConnect() /*-{
$wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', {
jid: 'sss',
password: 'sss'
}));
}-*/;
:)
{{1}}