2009-12-15 124 views
0

我想在Rails应用中解决原型和jQuery冲突。我发现jQuery打破了原型应用程序的好方法。jQuery,Prototype和插件之间的冲突

我开始通过将$jq = jQuery.noConflict();添加到application.js文件的过程。

然后我开始浏览项目中的所有.erb和.js文件,寻找对$的jQuery调用,并用$jq替换它们。然后我找到了一些jQuery插件文件。

我必须在jQuery插件.js文件中将所有$引用转换为$jq吗?

回答

1

我一定要转换的jQuery插件.js文件到$ JQ所有$引用包呢?

一般来说,没有。大多数插件设置为以$形式传递jQuery对象。如果你可以告诉一个插件这样做,因为它会是这样的:

(function($) { 

// Actual plugin code 

})(jQuery); 
+0

其中一个插件需要这个补充,但其余的工作完美无瑕。 –

1

您是否考虑将其添加到原型库js文件?这样,无论何时加载原型,它都会自动解除jQuery的冲突。

我们在这里用mootools做了类似的事情。

在回答你的问题时,如果插件已经正确写入,那么你不应该在那里改变它。以下约定应该封装该插件,以确保即使在启用noconflict时也能正确操作。

;(function($) { 

//plugin code 

})(jQuery); 
1

或者你可以在一个封闭

(function($){ 

// add old jQuery code here. 

})($jq); 
0

尝试加载jQuery和它的所有插件在一起,在一个序列,并然后调用noConflict()。这里有一个例子:

<script src="/path/to/1.3.1/jquery-1.3.1.min.js" type="text/javascript"></script> 
<script src="/path/to/1.3.1/jquery-ui-1.6rc6.min.js" type="text/javascript"></script> 
<script src="/path/to/jquery/plugin.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    var $jq = $jq || {}; 
    $jq.jQuery = jQuery.noConflict(true); 
</script> 

然后在自己的代码后,你可以参考JQ - 完成你想要的插件 - 使用$ jq.jQuery变量。

2

我碰到这个问题今天和包装插件代码来了,如:

(function($) { 
    //plugin code 
})(jQuery); 

没有工作,直到我感动,包括其中包括jQuery库文件前行原型库文件就行了。