gpt4 book ai didi

javascript - 使用 require 的 Dojo 循环依赖

转载 作者:行者123 更新时间:2023-12-02 15:48:01 25 4
gpt4 key购买 nike

我正在使用 dojo,这些是我的模块 -

'myview/ModuleA' --requires--> 'myview/ModuleB'
'myview/ModuleB' --requires--> 'myview/ModuleC'
'myview/ModuleC' --requires--> 'myview/ModuleD'

现在,我正在努力

'myview/ModuleD' --requires--> 'myview/ModuleB'

但是当 ModuleD 尝试将 ModuleB 实例化为 new ModuleB () 并出现 TypeError: ModuleB is not a constructor 时,代码会失败。当尝试实例化 ModuleD 时,我看到 ModuleB 只是一个 object 而不是 ModuleD 中的function。所以我知道为什么会出现错误。我还意识到这可能是因为循环依赖,这就是 ModuleB 未加载到 ModuleD 中的原因。

我可以通过从 ModuleDdefine(...) 的需求列表中删除 ModuleB 来解决这个问题在实例化之前使用 require() 加载它。这有效。

我的问题 - 这是做涉及模块循环依赖的事情的正确方法吗?还是有更好/不同的推荐方法?

谢谢

最佳答案

要求“动态”而不是在定义时间执行它是循环依赖的正确方法。
对此进行了解释:http://requirejs.org/docs/api.html#circular

If you define a circular dependency ("a" needs "b" and "b" needs "a"), then in this case when "b"'s module function is called, it will get an undefined value for "a". "b" can fetch "a" later after modules have been defined by using the require() method (be sure to specify require as a dependency so the right context is used to look up "a")

重要提示:在构建时,您必须在构建配置文件中指定动态需要的所有组件。否则它们将不会包含在要构建的文件列表中。

关于javascript - 使用 require 的 Dojo 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32045101/

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