在初始化期间,仅对页面上的所有实例运行一些jQuery小部件的代码

时间:2013-11-15 00:03:23

标签: jquery jquery-ui jquery-widgets

对于页面上的所有实例仅运行一些初始化小部件的代码有一些问题。

这是我的情况......

我必须在小部件初始化期间加载JS文件。目前我在_create()方法中执行此操作。但是当我尝试在页面上放置2个以上的实例时,widget会尝试多次加载相同的JS文件。那当然不好......所以我需要一些同步机制。

任何想法如何更好地同步它?

我正在考虑一些机制,允许在一些智能JS加载的页面上为所有窗口小部件的实例运行一些代码,这些实例不会加载相同的文件两次,只是控制加载过程并通知所有感兴趣的部分当过程结束时。

更新

在窗口小部件中加载一些JS文件实际上有两个问题:

  1. 仅加载文件一次
  2. 通知所有小部件的实例,即可以使用JavaScript代码
  3. 可以在窗口小部件初始化期间使用JS文件中的JavaScript代码,因此我需要通知窗口小部件它已正确加载并准备好使用。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解了您的需求,所以我希望这会有所帮助:

 var pluginName = "MyPlugin";
    $.fn[pluginName] = function ( options ) {

        if(!$.data("body", "alreadyLoadedFile"))
        {
          //load your file
           $.data("body", "alreadyLoadedFile", true);
        }
        return this.each(function () {
            if (!$.data(this, 'plugin_' + pluginName)) {
                $.data(this, 'plugin_' + pluginName, 
                new Plugin( this, options ));
            }
        });
    };

主要思想是使用dom元素上的数据(如body标签),或者给你的js文件一个id并检查它是否存在于你的页面上。