我想在Rails应用中解决原型和jQuery冲突。我发现jQuery打破了原型应用程序的好方法。jQuery,Prototype和插件之间的冲突
我开始通过将$jq = jQuery.noConflict();
添加到application.js文件的过程。
然后我开始浏览项目中的所有.erb和.js文件,寻找对$
的jQuery调用,并用$jq
替换它们。然后我找到了一些jQuery插件文件。
我必须在jQuery插件.js文件中将所有$
引用转换为$jq
吗?
我想在Rails应用中解决原型和jQuery冲突。我发现jQuery打破了原型应用程序的好方法。jQuery,Prototype和插件之间的冲突
我开始通过将$jq = jQuery.noConflict();
添加到application.js文件的过程。
然后我开始浏览项目中的所有.erb和.js文件,寻找对$
的jQuery调用,并用$jq
替换它们。然后我找到了一些jQuery插件文件。
我必须在jQuery插件.js文件中将所有$
引用转换为$jq
吗?
我一定要转换的jQuery插件.js文件到$ JQ所有$引用包呢?
一般来说,没有。大多数插件设置为以$形式传递jQuery对象。如果你可以告诉一个插件这样做,因为它会是这样的:
(function($) {
// Actual plugin code
})(jQuery);
您是否考虑将其添加到原型库js文件?这样,无论何时加载原型,它都会自动解除jQuery的冲突。
我们在这里用mootools做了类似的事情。
在回答你的问题时,如果插件已经正确写入,那么你不应该在那里改变它。以下约定应该封装该插件,以确保即使在启用noconflict时也能正确操作。
;(function($) {
//plugin code
})(jQuery);
或者你可以在一个封闭
(function($){
// add old jQuery code here.
})($jq);
尝试加载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变量。
我碰到这个问题今天和包装插件代码来了,如:
(function($) {
//plugin code
})(jQuery);
没有工作,直到我感动,包括其中包括jQuery库文件前行原型库文件就行了。
其中一个插件需要这个补充,但其余的工作完美无瑕。 –