2008-12-24 7 views
6

Próbuję utworzyć stronę na mojej osobistej stronie internetowej, która zarówno używa jQuery i implementuje Facebook Connect.Facebook Connect, jQuery UI i jQuery.noConflict()

Niestety Facebook client API używa $ token, co oznacza, że ​​muszę zadzwonić jQuery.noConflict()

dwukrotnie niestety, ja dowiedziałem się, że z jakiegoś szalonego powodu i as Rick Strahl points out, jQuery UI doesn't respect noConlict(). At all. W rzeczywistości, jeśli spojrzeć na kod źródłowy, na całym świecie jest $.

I naprawdę chcą mieć możliwość korzystania z jQuery UI - a konkretnie składnik dialog() i draggable byłoby naprawdę miłe, jak również - ale nawet moreso, nie chcę mieć do ręcznie zmienił - i przetestuj i utrzymuj - moją własną kopię dowolnej części interfejsu jQuery.

Jest to najnowszy z serii yaks I've had to shave, który ma mnie na końcu moich sprytu. Jakieś sugestie? Wsparcie!

+0

Jaka wersja API Facebook Connect używasz? Właśnie go pobrałem i wygląda na to, że używa FB, a nie przez cały czas. Może brakuje mi czegoś, choć ... – tvanfosson

+0

Nie jestem pewien, co masz na myśli ... Po prostu podążałem za ich dokumentacją do implementacji. Zanim zacząłem używać metody noConflict(), otrzymywałem dziwną metodę/obiekt, który nie zawiera błędów z elementów Facebooka. Nie przypominaj sobie, jakie były rzeczywiste błędy. –

Odpowiedz

18

Opublikowany przez Ciebie wpis jest dość stary i nieaktualny. Wersja 1.0 wydała jQuery UI ten problem w kilku plikach i została naprawiona natychmiast po zgłoszeniu.

Wszystkie jQuery UI jest zawijany w closure, który przechodzi w jQuery jako $ i dlatego może używać $ wewnętrznie, podczas gdy $ jest używany do czegoś innego na zewnątrz.

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

należy stosować następujące techniki, która pozwala na użycie $ wewnątrz bloku kodu bez trwałego nadpisując $:

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

Uwaga: Jeśli używasz w tej technice nadal można używać prototypu poprzez window.$ np. window.$('some_element_id'). Każda funkcja poza twoim zamknięciem, która odwołuje się do $, wywoła Prototype, nawet jeśli zostanie wywołana z twojego zamknięcia.

Dlatego zobaczysz $ wewnątrz plików jQuery UI, ale mieć pewność, każdy najnowsza wersja jQuery UI (1.5+) jest całkowicie obsługiwane jQuery.noConflict()

+0

Dzięki @rdworth, pomógł mi też. –