我有两个插件,其中一个总是在那里,另一个没有。在插件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方法,想知道最简洁的方法是什么。
答案 0 :(得分:0)
我以这种方式加载插件。 愿这对某人有用。
在全局部分中定义数组
var plugins = [];
像往常一样<script type="text/javascript" src="pluginX.js"></script>
每个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();
});
您应该找到应用程序的入口点并停在那里,等到插件加载并继续。