Frage

  public static native void doConnect() /*-{
            $wnd.jQuery(document).trigger('connect',
                    {
                    jid: 'sss',
                    password: 'sss'
                }

                );

        }-*/;

habe ich versucht, die oben, aber es ist kein Fehler in Firebug oder GWT gehostet Modus Konsole (so kann ich nicht wissen, ob der Code erfolgreich ist oder nicht). Darf ich weiß, ist dies der richtige Weg JQuery Auslöser zu nennen? aber wenn ich alarmiert () in bind ( 'connect'), wurde nicht genannt

innerhalb js-Datei

    $(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;
    });
War es hilfreich?

Lösung

Ich hatte ähnliche Probleme, wenn jQuery UI mit GWT verwenden - keinen Fehler in der Konsole / dev-Modus, doch der Code nicht verhalten wie ich wollte. Der Grund dafür war, dass jQuery (und solche Frameworks) ausfahren / viele Kernelemente JavaScript ändern und erwarten, dass es auf diese Weise bleiben - aber GWT-Code (das heißt, auch JSNI Sachen) von einem „sauberen“ iframe ausgeführt (so dass keine externen Gerüste können Chaos mit der Sprache und verursachen einige seltsame Fehler in GWT, das ist, warum Sie in das Hauptfenster über $wnd zu Referenz haben).

Ich würde vorschlagen, Ihre doConnect Funktion an der Host-Seite (oder externe JS-Datei an der Host-Seite verlinkt ist) bewegen und stattdessen rufen Sie einfach diese Funktion von Ihrem JSNI Stub:

public static native void doConnect() /*-{
   $wnd._doConnect('sss','sss'); //_doConnect defined in the host page
}-*/;

oder Hilfsfunktionen zur Verfügung stellen, die Arrays zurück, usw., von der Host-Seite, so dass sie alle die Änderungen beinhalten, dass jQuery gemacht und erwartet.

Andere Tipps

Es ist ein bisschen spät für diese Antwort, aber Ihr ursprünglicher Code funktioniert nicht wegen eines einfachen Fehler: Sie haben richtig verwendet $win statt window aber ein paar Zeichen später haben Sie gebrauchen document statt $doc:)

public static native void doConnect() /*-{
    $wnd.jQuery($doc).trigger($wnd.jQuery.Event('connect', {
        jid: 'sss',
        password: 'sss'
    }));
}-*/;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top