Вопрос

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

                );

        }-*/;

Я попробовал вышеупомянутое, но в консоли Firebug или GWT нет ошибок (поэтому я не могу знать, успешно ли этот код или нет).Могу ли я узнать, правильный ли это способ вызвать триггер jquery?но когда я поместил alert() в привязку('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;
    });
Это было полезно?

Решение

У меня были похожие проблемы при использовании пользовательского интерфейса jQuery с GWT — ошибок в режиме консоли/разработчика не было, но код вел себя не так, как я хотел.Причина заключалась в том, что 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.

Другие советы

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

public static native void doConnect() /*-{
    $wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', {
        jid: 'sss',
        password: 'sss'
    }));
}-*/;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top