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

関数をホスト ページ (またはホスト ページにリンクされた外部 js ファイル) に移動doConnectし、代わりに 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 に答える