【发布时间】:2011-03-08 19:46:59
【问题描述】:
我们希望从一个版本的 jQuery 升级到另一个版本。我们使用各种在线插件,并编写了许多我们自己的插件。现在的挑战是尝试在不完全重写的情况下缓慢迁移所有脚本对象。我对如何处理这个有一个想法:
但我有问题:
- 下面的想法是个好主意吗?
- 我可以(直接)告诉每个 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-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。
帮助我欧比旺·克诺比……你是我唯一的希望!
【问题讨论】:
-
这是什么原因?您认为您的某些插件在升级后会停止工作吗? (只是好奇......根据我的经验,迁移到更新版本的 jQuery 一直很轻松)
-
您是否使用了那么多已弃用的功能?您可以随时查看
http://docs.jquery.com/Release:jQuery_1.3.2(使用相关版本更改 1.3.2)并查看可能需要更改的内容。否则,加载每个库和var jQuery_1_3_2 = $.noConflict()可能是您最好的选择(尽管可以说是很多开销)。 -
请记住,我们不想重新编写每个插件。我们一次只想接触几个。我们有许多插件:一些是内部开发的,另一些来自在线资源。是的......由于被弃用等,对象一旦升级就会失败。但这不是问题。我已经知道如何痛苦地猜测和测试......我正在寻找更优雅的东西。
-
@Robalot:Elegent 可能正在更改每个插件的范围,然后创建一个处理程序,该处理程序可以传递一个 jQuery 版本并获取该版本,并在文件中执行查找/替换(省去加载每一个并调用
.noConflict) 寻找jQuery并使其成为jQuery_<version>的麻烦。类似<script src="jQuery.ashx?ver=1.3.2">的东西返回jQuery_1_3_2,然后是(function($){...})(jQuery_1_3_2);的引用 -
@Brad:我真诚地感谢您的反馈。也许我不明白……这和我上面的想法有什么不同?
标签: jquery asp.net version-control jquery-plugins