jquery - 有没有一种优雅的方式来缓慢升级 jQuery?

标签 jquery asp.net version-control jquery-plugins

我们想要从一个版本的 jQuery 升级到另一个版本。我们使用各种在线插件并编写了许多我们自己的插件。现在的挑战是尝试在不完全重写的情况下缓慢迁移所有脚本对象。我有一个关于如何处理这个问题的想法:

但我有疑问:

  1. 下面的想法是个好主意吗?
  2. 我可以(直接)告诉每个 jQuery 对象依赖项所在的位置吗?
  3. 如果这是一个坏主意......您会如何处理?
  4. 我是否只需重写升级时发生损坏的每个对象? (苏克斯!)

解释问题:
如果您的所有插件仅在单个页面的范围内运行,那么很容易解决不同的版本:只需在页面级别而不是母版页级别执行文件包含(废话!)。然而,位于母版页或用户控件中的对象有点困难......因为它们需要特定版本才能正确运行。

这是我的想法:
插件的定义以匿名函数开始。

(function ($){<!- code goes here -->})(jQuery);

我见过的所有依赖项都以此为起点。

示例: jQuery 依赖项包括插件,例如:ui.widget、ui.position、ui.core 等。

如果我使用 JavaScript 对象引用每个版本的 jQuery(及其依赖项)并将该对象传递到各种内部和在线插件中,会怎么样?

对象引用可能如下所示:

var jQueryVersion1_3_2 = function(){<!- paste the files contents here-->};
var jQueryVersion1_4_4 = function(){<!- paste the files contents here-->};

插件:
我的内部和在线插件仍然可以作为(正常)文件链接包含在内,但进行了以下更改

从此开始:

// 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);

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

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

  • ui.widget、ui.position、ui.core 等(升级后全部损坏)。

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

帮助我,欧比旺·克诺比……你是我唯一的希望!

最佳答案

使用 $.noConflict 全局创建所有版本

<script src="jquery 1.x" />
<script> 
    var jQuery_1_x = $.noConflict(true);
</script>
...

然后将每个 jQuery 插件(内部或第 3 方)包装在闭包中,例如:

(function(jQuery, $) {

    ... // code

}(jQuery_1_x, jQuery_1_x));

唯一可能破坏此方法的是第三方代码,该代码在任何函数之外使用 var foo 来创建全局对象。您需要查找任何全局函数/对象/方法并使用手动提升它们

window.foo = ...

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

关于jquery - 有没有一种优雅的方式来缓慢升级 jQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237455/

相关文章:

jquery - 仅验证脏输入

jquery - 如何在日期范围选择器中禁用上个月

javascript - 控制所选值未按预期工作

jquery - 尝试使用 ASP.net 发送电子邮件,无法将变量传递到 ashx 文件

git - 如何查看作者的所有代码更改?

git - 如何进行永久本地提交或更改

javascript - 在 JavaScript 中按换行符和制表符拆分文本文件

javascript - ASP.NET MVC - 捆绑配置顺序

c# - Eval 在代码隐藏中

ios - 如何在现有 iOS 项目中启用源代码管理?