Как вызвать jquery trigger из gwt?

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

                );

        }-*/;

я попробовал выше, но нет ошибок в режиме firebug или gwt console (так что я не могу знать, является ли код успешным или нет). могу ли я знать, это правильный способ вызова jquery trigger? но когда я поставил 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

У меня были подобные проблемы при использовании jQuery UI с GWT - никаких ошибок в режиме консоли /dev, но код не вел себя так, как я хотел. Причина заключалась в том, что 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 вместо $doc:)

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