2011-02-26 1 views
4

J'écris une application pour le moment qui utilise jquery. Il s'intègre à une application existante qui utilise un prototype alors évidemment je ne peux pas utiliser le signe du dollar tout de suite.JQuery - Pas de conflit ou de fermeture

J'utilise noconflict pour contourner cela, mais ne pourrais-je simplement envelopper mon script tout à l'intérieur d'une fermeture passant jquery comme dans:

(function($){ 

})(jQuery); 

Cela semble fonctionner mais je me demande s'il y a des conséquences pour ça?

Répondre

1

Cela devrait fonctionner correctement, puisque vous passez jQuery dans votre fermeture comme l'objet jQuery lui-même. Le noConflict devrait quand même être spécifié - sinon l'objet jQuery pourrait prendre le contrôle du signe dollar. L'appel à noConflict transmet le signe dollar à tout ce qui l'utilise déjà.

La documentation suggère cela aussi:

$.noConflict(); 
    jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    }); 
    // Code that uses other library's $ can follow here. 
0

Cela fonctionne comme un charme aussi longtemps que vous n'avez pas besoin d'accéder aux variables qui sont définies à l'intérieur du bloc.

Les plugins Jquery sont généralement codés en utilisant cette construction de blindage exacte.

Utilisez-le à la place de noConflict si vous le pouvez car noConflict vous force à accorder plus d'attention à l'ordre des scripts dans votre page.

Vous aurez besoin de charger le prototype après jquery afin qu'il puisse prendre possession du signe $.

0

noConflict() réinitialise toutes les variables que jQuery a définies avec leurs valeurs d'origine. Au lieu de dire:

$(document).ready() 

vous dites que

jQuery(document).ready() 
6

vous pouvez utiliser à la fois:

(function($){ 

})(jQuery.noConflict());