我有3个模块:模块A,模块B和模块C.
模块A在我的html页面中写入链接(链接来自ajax异步调用) 模块B也写了一些链接。 在我的模块C中,我想在模块A和B的链接上添加一个事件。
问题是模块加载顺序是随机的。 因此,当首先加载模块C时,没有链接,因为模块A和B还没有写入。
有没有办法在最后加载模块C?
感谢的
答案 0 :(得分:2)
模块加载顺序 无关紧要。 E.g。
define(function() {
return { addLinks: function() { ... } };
})
define(function() {
return { addLinks: function() { ... } };
})
define(function() {
return { addEvents: function() { ... } };
})
require(["links1", "links2", "events"], function(links1, links2, events) {
links1.addLinks(...);
links2.addLinks(...);
events.addEvents(...);
});
换句话说,不要让你的模块在加载时执行某些操作,让它们返回当你准备就绪时可以执行的方法。
上述模块可以按任何顺序加载......
并没关系。
编辑 - 如果links1
使用XHR,则app
需要在添加之前等待这些链接。
define(function() {
var promise = null;
function loadLinks() {
if (promise) {
return promise;
}
return promise = $.ajax(...).then(function(data) {
return convertDataToLinks(data);
});
}
return {
loadLinks: loadLinks,
addLinks: function() { ... }
};
})
require(["links1", "links2", "events"], function(links1, links2, events) {
links1.loadLinks().then(function(links) {
links1.addLinks(links);
links2.addLinks(links);
events.addEvents(...);
});
});