Como chamar o JQuery Trigger da GWT?
-
22-09-2019 - |
Pergunta
public static native void doConnect() /*-{
$wnd.jQuery(document).trigger('connect',
{
jid: 'sss',
password: 'sss'
}
);
}-*/;
Eu tentei o acima, mas não há erro no console do modo hospedado do Firebug ou GWT (para que não saiba se o código é sucesso ou não). Posso saber que essa é a maneira correta de chamar o JQuery Trigger? Mas quando eu coloquei alert () em bind ('connect'), não foi chamado
arquivo .js interno
$(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;
});
Solução
Eu tive problemas semelhantes ao usar a interface do usuário do JQuery com o GWT - nenhum erro no modo de console/dev, mas o código não se comportou como eu queria. O motivo foi que o jQuery (e essas estruturas) estendem/alteram muitos elementos centrais do JavaScript e esperam que ele permaneça assim - no entanto, o código GWT (significando também o material jsni) é executado a partir de um iframe "limpo" (para que nenhum externo As estruturas podem mexer com o idioma e causar alguns erros estranhos no GWT, é por isso que você precisa fazer referência à janela principal via $wnd
).
Eu sugiro mover seu doConnect
Função na página do host (ou arquivo JS externo vinculado à página do host) e, em vez disso, basta chamar essa função do seu JSNI Stub:
public static native void doConnect() /*-{
$wnd._doConnect('sss','sss'); //_doConnect defined in the host page
}-*/;
Ou forneça funções auxiliares que retorneão matrizes, etc., na página do host, para que incluam todas as alterações que o jQuery fez e espera.
Outras dicas
É um pouco tarde para esta resposta, mas seu código original não funcionou devido a um erro simples: você usou corretamente $win
ao invés de window
Mas alguns personagens depois você usou document
ao invés de $doc
:)
public static native void doConnect() /*-{
$wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', {
jid: 'sss',
password: 'sss'
}));
}-*/;