jQuery-prototype冲突:表过滤器插件

时间:2011-12-27 16:13:14

标签: javascript jquery jquery-plugins

我已经在这一段时间了一段时间了:

我在Redmine中使用了jQuery和Prototype,这是一个RoR webapp。由于jQuery的noConflict,它们很好地发挥作用。

我的jqGrid工作正常。

现在这是我的问题:我正在尝试使用Table Filter plugin by PicNet 但我得到以下js错误:

  

this.each不是函数

原型.js的第862行

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 个答案:

答案 0 :(得分:1)

我在'closure'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.
  */

所以我下载了必要的东西(python,closure编译器......)并自己构建了Table Filter代码,并将此参数设置为false,并且它可以工作。

现在我有另一个问题,但我应该没事。如果没有,我会回到这里问问!

答案 1 :(得分:0)

尝试将插件包装在:

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