Как сделать кастом, без необходимости редактирования, пуленепробиваемую версию jocery noconflict? - PullRequest
0 голосов
/ 25 января 2010

в моей работе мне всегда нужно использовать jquery с прототипом. Могу ли я сделать любой пользовательский jquery с библиотечным файлом, как когда я добавлю в голову, и тогда нет необходимости что-либо менять в любом коде.

это возможно?

Я не хочу ничего менять в коде $ на jQuery.

Ответы [ 4 ]

3 голосов
/ 25 января 2010

от http://www.cssnewbie.com/runing-jquery-with-other-frameworks-via-noconflict/

Вкратце

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

var $ j = jQuery.noConflict ();

Теперь помимо использования нотации jQuery () по умолчанию я также могу использовать более короткую нотацию $ j (). Это позволяет мне избежать проблем с другими фреймворками, сохраняя при этом почти ту же краткость в моем коде.

3 голосов
/ 25 января 2010

Возникает вопрос: почему бы вам тогда просто не реализовать все свои вещи в Prototype - или реализовать все в jQuery? В целом они оба имеют одинаковые возможности.

Однако, чтобы прямо ответить на ваш вопрос - на самом деле это не способ сделать пользовательскую сборку jQuery. Но вы можете просто позвонить noConflict сразу же после включения библиотеки jQuery.

Тогда для ваших вещей вы можете просто обернуть все это в

(function($){
  // your jQuery code here... Can be used with $ as normal.
})(jQuery);

внутри этой функции вы сможете использовать $ в качестве псевдонима - вне него вам нужно будет использовать jQuery. Единственный момент, который здесь есть, заключается в том, что если вы хотите, чтобы переменная, определенная внутри, была глобальной, вы должны сделать это вручную, поскольку все в этой области будет ограничено функцией. Вы можете сделать это так:

(function($){
  window.myGlobalVar = 'This is a global variable';
})(jQuery);
0 голосов
/ 25 января 2010

Чтобы ответить на ваш вопрос о том, можете ли вы иметь файл include-Once, вы можете сделать что-то похожее на:

/* MyLibLoader.js */
document.write("<script type='text/javascript' src='prototype.js'></script>");
document.write("<script type='text/javascript' src='jquery.js'></script>");
window.$j = jQuery.noConflict();

А потом в HTML

<head>
  <script type='text/javascript' src='MyLibLoader.js'></script>
</head>

Но этот подход предполагает, что вы готовы изменить использование jQuery на $j

0 голосов
/ 25 января 2010

Лучше всего часто заключать $ в частные рамки:

(function($) {
    // jQuery stuff
})(jQuery)

Вы также можете вызвать функцию jQuery.noConflict() перед переносом: http://api.jquery.com/jQuery.noConflict/

Другой простой вариант - связать noConflict() в обратный вызов domReady:

jQuery.noConflict()(function($){
    // code using jQuery or $
});

console.log(typeof $ === 'undefined') // prints true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...