Как вызвать триггер jquery из gwt?
-
22-09-2019 - |
Вопрос
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'
}));
}-*/;