Pri*_*ERO 5 asp.net version-control jquery jquery-plugins
我们想要从一个版本的jQuery升级到另一个版本.我们使用各种在线插件,并编写了许多我们自己的插件.现在的挑战是试图缓慢地缓慢移植所有脚本对象,而不需要完全重写.我有一个想法如何处理这个:
但我有疑问:
解释问题:
如果您的所有插件仅在单个页面的范围内存在,则可以轻松解决不同的版本:只需在页面级别而不是主页级别(duh!)执行文件包含.但是,生成在主页面或用户控件中的对象有点困难......因为它们需要特定版本才能正确运行.
这是我的想法:
插件的定义以匿名函数开头.
(function ($){<!- code goes here -->})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我见过的所有依赖项都以此为出发点.
举例: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-->};
Run Code Online (Sandbox Code Playgroud)
插件:我的内部插件和在线插件仍可作为(普通)文件链接包含在内,但有以下更改
从这里开始:
// Plug-in X
(function ($){<!- its untouched code -->})(jQuery);
// Plug-in Y
(function ($){<!- its untouched code -->})(jQuery);
// Plug-in Z
(function ($){<!- its untouched code -->})(jQuery);
Run Code Online (Sandbox Code Playgroud)
......版本很糟糕!
到这个......
// 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);
Run Code Online (Sandbox Code Playgroud)
...现在我们可以慢慢升级我们的对象.
我看到的唯一问题:
挑战成为插件依赖(版本之间).在测试升级中,以下内容开始突破各种插件,例如:
我唯一的答案是:
将jQuery和所有各种引用包装到一个函数中并将其保存到上面的变量中.然后将THAT中间对象传递到每个插件AS jQuery中.
帮助我Obi-Wan Kenobi ......你是我唯一的希望!
使用 $.noConflict 全局创建所有版本
<script src="jquery 1.x" />
<script>
var jQuery_1_x = $.noConflict(true);
</script>
...
Run Code Online (Sandbox Code Playgroud)
然后将每个 jQuery 插件(内部或第三方)包装在闭包中,例如:
(function(jQuery, $) {
... // code
}(jQuery_1_x, jQuery_1_x));
Run Code Online (Sandbox Code Playgroud)
此方法唯一可能破坏的是使用var foo
任何函数外部来创建全局对象的第 3 方代码。您需要查找任何全局函数/对象/方法并使用手动提升它们
window.foo = ...
值得庆幸的是,无论如何,创建全局函数/对象/方法被认为是不好的形式,所以不应该有太多。
归档时间: |
|
查看次数: |
153 次 |
最近记录: |