是否有一种优雅的方式来缓慢升级jQuery?

Pri*_*ERO 5 asp.net version-control jquery jquery-plugins

我们想要从一个版本的jQuery升级到另一个版本.我们使用各种在线插件,并编写了许多我们自己的插件.现在的挑战是试图缓慢地缓慢移植所有脚本对象,而不需要完全重写.我有一个想法如何处理这个:

但我有疑问:

  1. 这个想法下面是一个好主意吗?
  2. 我可以(直接)告诉每个jQuery对象依赖的位置吗?
  3. 如果这是一个坏主意......你如何处理它?
  4. 我只是重新编写在升级时会破坏的每个对象吗?(SUX!)

解释问题:
如果您的所有插件仅在单个页面的范围内存在,则可以轻松解决不同的版本:只需在页面级别而不是主页级别(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)

...现在我们可以慢慢升级我们的对象.

我看到的唯一问题:
挑战成为插件依赖(版本之间).在测试升级中,以下内容开始突破各种插件,例如:

  • ui.widget,ui.position,ui.core等(一切都在升级时破坏).

我唯一的答案是:
将jQuery和所有各种引用包装到一个函数中并将其保存到上面的变量中.然后将THAT中间对象传递到每个插件AS jQuery中.

帮助我Obi-Wan Kenobi ......你是我唯一的希望!

Ray*_*nos 1

使用 $.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 = ...

值得庆幸的是,无论如何,创建全局函数/对象/方法被认为是不好的形式,所以不应该有太多。