2011-12-27 3 views
2

Я был в этом один на некоторое время теперь:JQuery-прототип конфликта: фильтр таблицы плагин

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

У меня также работает jqGrid.

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

this.each is not a function

@ линии 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, чтобы начать с, и я озадачен, почему это вызывает неправильное функция ...

PS: Я использую

  • JQuery 1.4.4
  • Прототип 1,7
  • Firebug 1.8.4 для отладки

Update: нашел ответ сам, смотри ниже!

+0

Хм .. Я здесь новый. Нормально ли для stackoverflow удалить мои функции? – illiptic

+0

См. Http://stackoverflow.com/faq#signatures. – Blazemonger

+0

@illiptic - да, такие вещи, как «Спасибо заранее» или «любая помощь ...» обычно удаляются как шум. –

ответ

1

Я нашел решение в «замкнутость» Lib, зависимость для таблицы Фильтр:

/** 
    * @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. 
    */ 

Так я скачал необходимые вещи (питон, замыкающий компилятор, ...) и построил код фильтра таблицы сам с этим параметром, установленным на false, и он работает.

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

0

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

;(function($) { 
    // This way you secure that $ in this local scope is referring to jQuery and not prototype. 
    // Original plugin goes here.... 
})(jQuery); 
+0

Я уже пробовал, жаль, что не упомянул. – illiptic

Смежные вопросы