插件之间的依赖关系?在创建插件之前调用方法

时间:2013-09-02 06:03:02

标签: javascript jquery plugins jquery-plugins dom-events

我有两个插件,其中一个总是在那里,另一个没有。在插件2的初始化期间,我尝试从插件1访问设置变量,但是因为还没有创建插件1(加载顺序)而得到错误。即:

;(function$) {
    $.plugin2 = function(el, options) {
        ...
        ...
        var init = function() {
        plugin.settings = $.extend({}, defaults, options);
        plugin.el = el;

        var init = function() {
            ...plugin1Instance.settings.variable... <--------
        }

        init();
    };
});

不想做timeOut方法,想知道最简洁的方法是什么。

2 个答案:

答案 0 :(得分:0)

我以这种方式加载插件。 愿这对某人有用。

在全局部分中定义数组

var plugins = [];

像往常一样<script type="text/javascript" src="pluginX.js"></script>

加载我的所有插件(* .js)

每个pluginX.js将他的init()函数添加到plugins数组。

onload文件体事件处理程序循环通过插件数组并调用每个添加的函数。

所以,我们等到文档加载所有脚本,然后继续。

全球部分的代码:

var plugins = [];

function startOnLoad() {
   // Start init() of every 'registered; plugin
   for (var i = 0; plugins.length - 1; i++) {
      plugins[i]();
   }

   // Ok, all plugins initialized, can access each other.
   // Ex: plugin1Instance.settings.variable and etc.
}

在每个pluginX.js中结束:

plugins.push(Plugin1.init);

PS:在插件数组定义的部分之后加载插件。

答案 1 :(得分:0)

如果你的插件放在外部文件中,那么监听onload事件就足够了:

var windowOnLoad = function() {
    // your plugins should be loaded at the moment
}
if (window.addEventListener) {
    window.addEventListener('load', windowOnLoad, false);
} else if (window.attachEvent) {
    window.attachEvent('onload', windowOnLoad);
}

如果由于某种原因无效,您应该编辑插件并在初始化后收到通知。

var totalPlugins = 2;
var numberOfLoadedPlugins = 0;
var pluginLoaded = function() {
    numberOfLoadedPlugins += 1;
    if(numberOfLoadedPlugins === totalPlugins) {
        // it's done. your plugins are loaded
        // proceed with the other logic
    }
}

;(function$) {
    $.plugin1 = function(el, options) {
        // ...
    };
    pluginLoaded();
});
;(function$) {
    $.plugin2 = function(el, options) {
        // ...
    };
    pluginLoaded();
});

您应该找到应用程序的入口点并停在那里,等到插件加载并继续。