2015-05-07 3 views
2

Я работаю с сайтом Magento. Я сталкиваюсь с проблемой получения prototype.js Magento, чтобы играть хорошо с jQuery. Я читал, что все мои jQuery должны использовать jQuery.noConflict(); которые я сделал, но у меня все еще есть некоторые проблемы. Я видел, что некоторые функции, закрывающие скобки, сопровождаются (jQuery).Почему (jQuery) после закрытия функции скобки

Мне интересно, для чего это необходимо, и если мне нужно изменить его на (jQuery.noConflict())?

ответ

3

Нет необходимости менять (jQuery) на (jQuery.noConflict()) до тех пор, пока jQuery.noConflict() не вызывается перед этой точкой (и после включения библиотеки JQuery).

Как вы знаете, когда вы используете jQuery в режиме без конфликтов, вы должны использовать jQuery вместо $.

Но вы можете использовать $ вместо jQuery в коде помещенной внутри сразу вызывается функция выражения (IIFE), как это:

(function($) { 
    // Code here can use $, instead of jQuery. 
})(jQuery); 

IIFE где вы определяете анонимную функцию и немедленно вызвать его. В приведенном выше коде объект jQuery передается как аргумент анонимной функции, и поскольку параметр имеет имя $, $ представляет объект jQuery внутри функции.

Также jQuery объекта передается в качестве первого параметра функции обратного вызова для документа готовых событий, так что вы можете сделать следующее:

jQuery(function($) { 
    // Code here can use $, instead of jQuery. 
}); 

который так же, как:

jQuery(document).ready(function($) { 
    // Code here can use $, instead of jQuery. 
}); 

Просто имейте в виду, что переменные, объявленные var внутри IIFE, не являются глобальными. Это часто бывает хорошо, и это еще одна причина для использования IIFE. Если вы хотите объявить глобальную переменную внутри IIFE, вы должны называть ее как свойство объекта window.

<script type="text/javascript"> 
var a = 1; // This is a global variable. 
(function($) { 
    var b = 2; // This is NOT a global variable. 
    window.c = 3; // This is a global variable. 
})(jQuery); 
<script>