【问题标题】:dojo.require not loading in recursive orderdojo.require 不按递归顺序加载
【发布时间】:2015-06-04 10:27:40
【问题描述】:

我正在尝试将我的一些 dojo 1.7 代码库移到网上。我已经在服务器上启用了 CORS,并且本地/在线文件加载了dojo.require

虽然这适用于本地文件,但 http 文件将无法以递归顺序加载。例如,

dojo.registermodulepath("my.path", "http://my.path");
dojo.require(my.path.module1);
dojo.require(my.path.module2);

现在,假设 module1 文件已加载,并且有自己的子依赖项,dojo.require 应该首先加载这些子依赖项;但我观察到,对于在线文件,它直接加载module2 并破坏了顺序。

因此,该应用程序将无法运行。怎么样?

【问题讨论】:

    标签: javascript dojo cross-domain


    【解决方案1】:

    一般来说,同一“级别”的依赖项(例如,同一模块中的两个 dojo.require 调用)不应该是顺序依赖的。如果module2 确实依赖于已加载的module1,那么module2 本身应该包含对module1require 调用,这将准确地表达递归依赖关系。

    我建议不要假设 dojo.require 同步运行 - 在此假设下运行会​​破坏您尝试进行跨域构建或更新以使用 async: true 的正确 AMD 模式的加载程序。

    同时,如果“本地”是指文件系统访问,则强烈建议使用实际的 Web 服务器来运行 Web 应用程序。浏览器通常对 file:// URL 进行更严格的操作,例如阻止 XHR。

    【讨论】:

    • 现在我想起来了,我的“本地文件”实际上也是通过 HTTP 发送的。它是本地的服务器。
    • 好吧,我不知道用哪种方式阅读它。如果您真的在谈论来自 2 个 HTTP 服务器的模块,我真的鼓励您将代码更新为 AMD 格式并在加载程序中打开 async: true - 那时您也不需要 CORS,因为加载程序通过脚本注入运行,而不是同步 XHR + eval。 Introduction to AMD modulesAdvanced AMD Usage 教程值得一读。
    • 问题已解决。结果我需要做的就是直接dojo.require这些文件,而不是递归。谢谢你的解释。
    【解决方案2】:

    你可以设置

      <script>
    dojoConfig= {
         async: false
    };
    </script>
    

    或者在 AMD 风格中,您只能在模块 1 加载后加载模块 2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多