Конфликт jQuery-прототипа: плагин табличного фильтра - PullRequest
2 голосов
/ 27 декабря 2011

Я был здесь некоторое время:

Я использую jQuery и Prototype в Redmine, веб-приложении RoR. Они хорошо играют друг с другом благодаря jQuery noConflict.

У меня тоже отлично работает jqGrid.

Теперь вот моя проблема: я пытаюсь использовать плагин Table Filter от PicNet но я получаю следующую ошибку js:

this.each не является функцией

@ строка 862 файла prototype.js

function collect(iterator, context) {
   iterator = iterator || Prototype.K;
   var results = [];
   this.each(function(value, index) {
      results.push(iterator.call(context, value, index));
   });
   return results;
} 

Очевидно, что он вызывает функцию-прототип, хотя не должен, но код плагина минимизирован и фактически скомпилирован с python, так что не существует минимизированной версии ...

Я не очень хорошо разбираюсь в js, и мне непонятно, почему он вызывает неправильную функцию ...

P.S .: Я использую

  • jQuery 1.4.4
  • Прототип 1.7
  • Firebug 1.8.4 для отладки

Обновление: сам нашел ответ, см. Ниже!

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Я нашел решение в lib 'closure', зависимости для Table Filter:

 /**
  * @define {boolean} NATIVE_ARRAY_PROTOTYPES indicates whether the code should
  * rely on Array.prototype functions, if available.
  *
  * The Array.prototype functions can be defined by external libraries like
  * Prototype and setting this flag to false forces closure to use its own
  * goog.array implementation.
  *
  * If your javascript can be loaded by a third party site and you are wary about
  * relying on the prototype functions, specify
  * "--define goog.NATIVE_ARRAY_PROTOTYPES=false" to the JSCompiler.
  */

Итак, я скачал необходимые вещи (python, closure compiler, ...) и построил Table Filterсам кодирую с этим параметром, установленным в false, и он работает.

Теперь у меня есть другая проблема, но я должен быть в порядке.Если нет, я вернусь сюда и спросить!

0 голосов
/ 27 декабря 2011

Попробуйте обернуть плагин в:

;(function($) {
    // This way you secure that $ in this local scope is referring to jQuery and not prototype.
    // Original plugin goes here....
})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...