有没有更好的方法来使用没有jQuery UI的jQuery UI小部件工厂?

时间:2012-02-22 20:35:58

标签: javascript jquery jquery-ui jquery-plugins

我开发并维护一个名为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?

1 个答案:

答案 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只需要放入新文件。