gpt4 book ai didi

javascript - Require.js 模块加载顺序

转载 作者:行者123 更新时间:2023-12-02 18:39:25 26 4
gpt4 key购买 nike

我有 3 个模块:模块 A、模块 B 和模块 C。

模块 A 在我的 html 页面中写入链接(链接来自 ajax 异步调用)模块B也写了一些链接。在我的模块 C 中,我想在模块 A 和 B 的链接上添加一个事件。

问题是模块加载顺序是随机的。所以,当模块C第一次加载时,没有链接,因为模块A和B还没有写入。

有没有办法在最后加载模块C?

谢谢

最佳答案

模块加载顺序应该无关紧要。例如

links1.js

define(function() {
return { addLinks: function() { ... } };
})

links2.js

define(function() {
return { addLinks: function() { ... } };
})

事件.js

define(function() {
return { addEvents: function() { ... } };
})

app.js

require(["links1", "links2", "events"], function(links1, links2, events) {
links1.addLinks(...);
links2.addLinks(...);
events.addEvents(...);
});

换句话说,不要让您的模块在加载时执行某些操作,而是让它们返回可以在准备好时执行的方法。

上面的模块可以按任何顺序加载...

  • 链接1、链接2、事件
  • 链接1、事件、链接2
  • 链接2、链接1、事件
  • 链接2、事件、链接1
  • 事件、链接1、链接2
  • 事件、链接2、链接1

这并不重要。

<小时/>

编辑 - 如果 links1 使用 XHR,则 app 需要等待这些链接,然后再添加它们。

links1.js

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() { ... }
};
})

app.js

require(["links1", "links2", "events"], function(links1, links2, events) {
links1.loadLinks().then(function(links) {
links1.addLinks(links);
links2.addLinks(links);
events.addEvents(...);
});
});

关于javascript - Require.js 模块加载顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com