Как вызвать триггер jquery из gwt? - PullRequest
12 голосов
/ 23 февраля 2010
  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;
    });

Ответы [ 2 ]

12 голосов
/ 23 февраля 2010

У меня были похожие проблемы при использовании jQuery UI с GWT - никаких ошибок в режиме console / 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 внес и ожидает.

4 голосов
/ 19 апреля 2012

Слишком поздно для этого ответа, но ваш исходный код не сработал из-за простой ошибки: вы правильно использовали $win вместо window, но через несколько символов вы использовали document вместо $doc:)

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