我们希望从一个版本的jQuery升级到另一个版本。我们使用各种在线插件,并编写了许多我们自己的插件。现在的挑战是试图缓慢地缓慢移植所有脚本对象,而不需要完全重写。我对如何处理这个问题有一个想法:
但我有疑问:
解释问题:
如果您的所有插件仅在单个页面的范围内存在,则可以轻松解决不同的版本:只需在页面级别而不是主页面级别执行文件包括(呃!)。但是,存在于主页面或用户控件中的对象有点困难......因为它们需要特定版本才能正确运行。
这是我的想法:
插件的定义以匿名函数开头。
(function ($){<!- code goes here -->})(jQuery);
我见过的所有依赖项都以此为出发点。
实施例: jQuery依赖包括插件,如:ui.widget,ui.position,ui.core等。
那么如果我使用JavaScript对象引用每个版本的jQuery(及其依赖项)并将THAT OBJECT传递给各种内部和在线插件呢?
对象参考可能会像这样:
var jQueryVersion1_3_2 = function(){<!- paste the files contents here-->};
var jQueryVersion1_4_4 = function(){<!- paste the files contents here-->};
PLUG-INS:
我的内部和在线插件仍可作为(普通)文件链接包含在内,但有以下更改
从这里开始:
// Plug-in X
(function ($){<!- its untouched code -->})(jQuery);
// Plug-in Y
(function ($){<!- its untouched code -->})(jQuery);
// Plug-in Z
(function ($){<!- its untouched code -->})(jQuery);
......版本很糟糕!
到这......
// Plug-in X
(function ($){<!- its untouched code -->})(jQueryVersion1_3_2);
// Plug-in Y
(function ($){<!- its untouched code -->})(jQueryVersion1_3_2);
// Plug-in Z
(function ($){<!- its untouched code -->})(jQueryVersion1_4_4);
...现在我们可以慢慢升级我们的对象。
我看到的唯一问题:
挑战成为插件依赖(版本之间)。在测试升级中,以下内容开始突破各种插件,例如:
我看到的唯一答案是:
将jQuery和所有各种引用包装到单个函数中并将THAT保存到上面的变量中。然后将THAT中间对象传递给每个插件AS jQuery。
帮助我Obi-Wan Kenobi ......你是我唯一的希望!
答案 0 :(得分:1)
使用$ .noConflict全局创建所有版本
<script src="jquery 1.x" />
<script>
var jQuery_1_x = $.noConflict(true);
</script>
...
然后将每个jQuery插件,内部或第三方包装在闭包中,如:
(function(jQuery, $) {
... // code
}(jQuery_1_x, jQuery_1_x));
使用此方法唯一可以解决的是第三方代码,它在任何函数之外使用var foo
来创建全局对象。您需要查找任何全局函数/对象/方法,并使用
window.foo = ...
值得庆幸的是,通过该方法创建全局函数/对象/方法被认为是不好的形式,因此不应该有太多这些。