Come chiamare grilletto jquery da GWT?
-
22-09-2019 - |
Domanda
public static native void doConnect() /*-{
$wnd.jQuery(document).trigger('connect',
{
jid: 'sss',
password: 'sss'
}
);
}-*/;
ho provato quanto sopra, ma non c'è nessun errore in Firebug o in modalità GWT ospitato console (quindi non posso sapere se il codice è successo o meno). Posso sapere è questo il modo corretto di chiamare grilletto jquery? ma quando ho messo alert () nella legatura ( 'connect'), non è stato chiamato
all'interno del file .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;
});
Soluzione
Ho avuto problemi simili quando si utilizza jQuery UI con GWT - nessun errore in modalità dev console /, ma il codice non si comportava come avrei voluto. La ragione era che jQuery (e tali quadri) si estendono / modificare molti elementi di base di JavaScript e si aspettano di rimanere in quel modo - tuttavia, il codice GWT (significato, anche roba JSNI) viene eseguito da un iframe "pulito" (in modo che nessun esterno quadri possono pasticciare con la lingua e causare alcuni errori strani in GWT, è per questo che si deve fare riferimento alla finestra principale via $wnd
).
Io suggerirei di spostare la vostra funzione doConnect
alla pagina host (o js esterno file collegato alla pagina host) e invece basta chiamare quella funzione dal vostro stub JSNI:
public static native void doConnect() /*-{
$wnd._doConnect('sss','sss'); //_doConnect defined in the host page
}-*/;
O fornire funzioni di supporto che restituirà Array, ecc, dalla pagina host, in modo che essi comprendono tutti i cambiamenti che jQuery ha fatto e si aspetta.
Altri suggerimenti
E 'un po' tardi per questa risposta, ma il vostro codice originale non ha funzionato a causa di un semplice errore: Hai usato correttamente $win
invece di window
ma alcuni caratteri dopo aver utilizzato document
invece di $doc
:)
public static native void doConnect() /*-{
$wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', {
jid: 'sss',
password: 'sss'
}));
}-*/;