2008-12-24 11 views
6

J'essaye de construire une page sur mon site personnel qui a utilisé jQuery et implémente Facebook Connect.Facebook Connect, jQuery UI, et jQuery.noConflict()

Malheureusement, le Facebook client API utilise le $ token, ce qui signifie que je dois appeler jQuery.noConflict()

Double-malheureusement, j'ai trouvé que, pour une raison folle et as Rick Strahl points out, jQuery UI doesn't respect noConlict(). At all. En fait, si vous regardez le code source, il y a $ partout.

Je vraiment veux être en mesure d'utiliser l'interface utilisateur jQuery - Plus précisément, le composant dialog() et draggable serait vraiment bien aussi - mais je même moreso, je ne veux pas avoir à modifier manuellement - et test, et maintenez - ma propre copie de n'importe quelle partie de l'interface utilisateur de jQuery.

C'est le plus récent d'une série de yaks I've had to shave qui m'a à la fin de mon esprit. Aucune suggestion? Aidez-moi!

+0

Quelle est la version de l'API Facebook Connect utilisez-vous? Je l'ai juste téléchargé et on dirait qu'il utilise FB, pas $ tout au long. Peut-être que je manque quelque chose, cependant ... – tvanfosson

+0

Je ne sais pas ce que vous voulez dire ... Je viens de suivre leur documentation pour la mise en œuvre. Avant de commencer à utiliser noConflict(), je recevais une méthode/un objet bizarre qui n'existait pas dans les trucs de Facebook. Je ne me souviens pas quelles étaient les erreurs réelles. –

Répondre

18

Le message que vous avez référencé est assez ancien et obsolète. La version 1.0 de jQuery UI contenait ce problème dans quelques fichiers et a été corrigé dès qu'il a été signalé.

Toute l'interface utilisateur jQuery est enveloppée dans un closure qui passe dans jQuery sous la forme $ et peut donc utiliser $ interne tandis que $ est utilisé pour autre chose en externe.

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

Utilisez la technique suivante, ce qui vous permet d'utiliser $ à l'intérieur d'un bloc de code sans permanence écraser $:

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

Note: Si vous utilisez cette technique, vous pouvez toujours utiliser Prototype via window.$ par exemple, window.$('some_element_id'). Toute fonction en dehors de votre fermeture qui fait référence à $ invoquera Prototype, même si elle est appelée de l'intérieur de votre fermeture.

C'est pourquoi vous verrez $ dans les fichiers jQuery UI, mais rassurez-vous, une version récente de jQuery UI (1.5+) est complètement pris en charge avec jQuery.noConflict()

+0

Merci @rdworth, ça m'a aidé aussi. –