2008-12-24 4 views
6

Ich versuche, eine Seite auf meiner persönlichen Website zu erstellen, die beide jQuery verwendet und implementiert Facebook Connect.Facebook Connect, jQuery UI und jQuery.noConflict()

Leider ist die Facebook client API verwendet die $ token, das heißt ich jQuery.noConflict()

Doppel leider nennen haben, habe ich aus irgendeinem verrückten Grund und as Rick Strahl points out, jQuery UI doesn't respect noConlict(). At all. In der Tat fand heraus, dass, wenn man sich den Quellcode schauen, Es gibt $ s überall.

ich wirklich in der Lage sein wollen, jQuery UI verwenden - insbesondere die dialog() Komponente und draggable wäre auch wirklich schön sein - aber ich sogar noch mehr, ich will nicht von Hand bearbeiten haben - und Testen und pflegen Sie - meine eigene Kopie eines Teils von jQuery UI.

Dies ist das neueste in einer Reihe von yaks I've had to shave, die mich am Ende meiner Weisheit hat. Irgendwelche Vorschläge? Hilfe!

+0

Welche Version der Facebook-Connect-API unterstützt wird verwenden Sie? Ich habe es gerade heruntergeladen und es sieht so aus, als würde es FB benutzen, nicht $ durchgängig. Vielleicht verpasse ich etwas, aber ... – tvanfosson

+0

Nicht sicher, was du meinst ... Ich folgte nur ihrer Dokumentation für die Umsetzung. Bevor ich anfing, noConflict() zu verwenden, bekam ich seltsame Methode/Objekt existiert nicht Fehler von den Facebook-Sachen. Ich erinnere mich nicht, was die tatsächlichen Fehler waren. –

Antwort

18

Der Beitrag, auf den Sie verwiesen haben, ist ziemlich alt und veraltet. Die 1.0 Version von jQuery UI hatte dieses Problem in ein paar Dateien und wurde behoben, sobald es gemeldet wurde.

Alle von jQuery UI ist in eine closure verpackt, die in jQuery als $ übergeben und daher $ intern verwenden kann, während $ für etwas anderes extern verwendet wird.

Von http://docs.jquery.com/Using_jQuery_with_Other_Libraries#Referencing_Magic_-_Shortcuts_for_jQuery

Verwenden Sie die folgende Technik, die Sie dauerhaft überschreiben $ ohne $ innerhalb eines Blocks von Code verwenden können:

(function($) { 
    /* some code that uses $ */ 
})(jQuery) 

Hinweis: Wenn Sie Mit dieser Technik können Sie noch Prototype über window.$ zB window.$('some_element_id') verwenden. Jede Funktion außerhalb Ihres Closings, die auf $ verweist, ruft Prototype auf, auch wenn sie von Ihrem Closing aus aufgerufen wird.

diesem Grund sollten Sie $ innerhalb der jQuery UI-Dateien sehen werden, aber sicher sein, jede neue Version von jQuery UI (1.5+) vollständig mit jQuery.noConflict()

+0

Danke @rdworth, es hat mir auch geholfen. –