Как вызвать 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'
}));
}-*/;