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

2 回答 2

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
}-*/;

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

于 2010-02-23T16:48:09.193 回答
4

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

public static native void doConnect() /*-{
    $wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', {
        jid: 'sss',
        password: 'sss'
    }));
}-*/;
于 2012-04-18T20:50:25.730 回答