我遇到了使用jquery expose plugin和Masked Input插件的问题。
问题是它们都占据了导致冲突的$.mask
功能。但我非常需要这两个插件一起工作。我会在其中一个中重命名$.mask
...让我们说$.msk
,但在这种情况下,我总是需要记住它,如果我想升级到新版本,我会重命名再次。
寻找更好的解决方案来解决jquery插件之间的这种冲突。
答案 0 :(得分:13)
我认为您可以选择需要记住某些内容的解决方案,问题是您多久想要记住这些内容。
如果您重命名其中一个,那么您必须记住修补任何升级。我不认为这是一个大问题,它一直在软件开发中发生。
另一种方法是拉入其中一个插件,然后立即加载一个名称空间修补程序(例如jQuery.fn.masked_input = jQuery.fn.mask;
),然后在此之后加载公开插件。只要重命名的插件在任何地方都没有引用自己的名称,这种方法就会起作用。而且,您必须记住插件的特定加载顺序。这种事情也一直在软件开发中出现。
答案 1 :(得分:3)
我认为我同意穆的回答。一个补充可能是使用jQuery.sub()。
由于大多数插件在构造期间使用jQuery全局,因此您应该能够在加载其中一个插件之前对jQuery进行别名。然后你可以在之后重新别名,无论你选择什么。
<script src="http://cdn.jquerytools.org/1.2.5/full/jquery.tools.min.js?foo"></script>
<script type="text/javascript">
var jQuery = $.sub();
</script>
<script src="jquery.maskedinput.js" type="text/javascript"></script>
<script type="text/javascript">
var $$$ = jQuery;
jQuery = $;
</script>
这种方法唯一可能的优势是它可能会将一个插件与另一个插件可能对jQuery方法所做的更改隔离开来。它有点令人费解但是改变插件的唯一选择,我能想到的。
答案 2 :(得分:-1)
确定。我现在正在回答我的问题。
我认为 mu太短的方法,但它不太适合。我的同事提供了以下内容:
我们像这样创建jQuery的新实例:
var $$$ = $.extend( true, function(selector, context) {
return new $$$.fn.init( selector, context );
}, $);
$$$.fn = $$$.prototype = jQuery.prototype;
我们在其上创建了$
函数的插件闭包(因为$
在插件中使用):
(function($) {
... plugin code goes here ...
$.fn.extend({
myplugin: function(maybe_some_options) {
...
})($$$);
现在我们可以同时拨打$$$(<selector>).myplugin( { do : 'great job', and : 'be happy' } );
和$(<selector>).myplugin()
。
到目前为止,我们对这种方法没有任何问题,我看不出它会破坏的原因,所以我们决定采取这个决定。