Cómo llamar gatillo jQuery desde GWT?
-
22-09-2019 - |
Pregunta
public static native void doConnect() /*-{
$wnd.jQuery(document).trigger('connect',
{
jid: 'sss',
password: 'sss'
}
);
}-*/;
he intentado todo lo anterior, pero no hay ningún error en Firebug o GWT modo de host consola (por lo que no puede saber si el código es el éxito o no). Puede que lo que sé es este el camino correcto llamar jQuery gatillo? pero cuando pongo alerta () en lazo ( 'conectar'), no fue llamado
archivo dentro de 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;
});
Solución
tuve temas similares al usar jQuery UI con GWT - no hay errores en el modo dev / consola, sin embargo, el código no se comportan como yo quería. La razón era que jQuery (y esos marcos) se extienden / cambiar muchos elementos básicos de JavaScript y esperan que permanezca de esa manera - sin embargo, el código de GWT (es decir, también las cosas JSNI) se ejecuta a partir de una "limpia" iframe (de modo que ninguna externa marcos puede meterse con la lengua y la causa de algunos errores extraños en GWT, es por eso que tiene que referencia a la ventana principal a través de $wnd
).
Me gustaría sugerir mover su función doConnect
a la página de acogida (o un archivo JS externo vinculado a la página de acogida) y en lugar de simplemente llamar a esa función a partir de su recibo de JSNI:
public static native void doConnect() /*-{
$wnd._doConnect('sss','sss'); //_doConnect defined in the host page
}-*/;
O proporcionar funciones auxiliares que devuelven matrices, etc., desde la página de acogida, de manera que incluyan todos los cambios que hizo jQuery y espera.
Otros consejos
Es un poco tarde para esta respuesta, pero su código original no funcionó debido a un simple error: Ha utilizado adecuadamente $win
en lugar de window
pero algunos caracteres más tarde usted tiene document
utiliza en lugar de $doc
:)
public static native void doConnect() /*-{
$wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', {
jid: 'sss',
password: 'sss'
}));
}-*/;