我开发并维护一个名为jquery-ui-picklist的jQuery小部件。我一直想要删除对jQuery UI的依赖,以便它可以在jQuery和jQuery UI应用程序中使用。
我避免过渡,直到昨天,当我发现我可以做这样的事情时:
(function($)
{
if($.widget == null)
{
// Contents of jquery.ui.widget.js, straight from jQuery UI, goes here.
}
$.widget("awnry.pickList",
{
// My widget's actual code goes here.
});
}(jQuery));
(如果您有兴趣,小工具的完整来源can be found here。)
毋庸置疑,包括这样的供应商代码在内,一定要包括肮脏和狡猾。有没有更正确,更优雅或更好的方法来删除jQuery UI依赖,而不会让我的用户在他们的页面中添加另一个JS include? p>
答案 0 :(得分:0)
在考虑了我的选项后,我最终从我的小部件中删除了if()
语句和Widget Factory代码。
我的小部件用户有两个选择。如果他们的页面包含jQuery UI,则不必做任何额外的事情。如果他们的页面仅包含常规jQuery,则还必须包含jquery.ui.widget.js
(为了方便起见,它与我的小部件打包在一起)。
我做出决定的理由:
窗口小部件代码不会与供应商代码混在一起。
Widget与任何特定的Widget Factory实现或版本分离。换句话说,$.Widget
可以来自jQuery UI或jquery.ui.widget.js
或任何地方;小部件不关心。
Widget仍然可以使用常规jQuery,但我仍然可以使用Widget Factory。
升级Widget Factory只需要放入新文件。