繁体   English   中英

如何从Dojo层加载AMD模块

[英]How to load an AMD Module from a Dojo Layer

在我们的应用程序中,我们对某些小部件使用dojo,包括几个自定义小部件,并将AMD格式用于多个模块。

例如

define("foo.bar.module", ["dojo/_base/declare"], function(declare) {

   var module  = declare("foo.bar.module", [], {
      // Do Stuff
   }

   return module;
});

目前工作正常,因为每个模块都是单独请求的。 但是,我们已经确定使用dojo层将其折叠为一个请求将是一个很好的优化。

问题是,我们先加载图层,然后尝试要求图层中定义的模块,但是dojo加载器找不到模块。 在构建配置文件中是否需要特别需要的东西才能使其工作? 一些帮助或文档链接将不胜感激。

模块ID是路径,而不是对象标识符。 define的第一个参数是错误的; 如果它存在,它应该是foo/bar/module 但是,您不应该提供第一个字符串参数来define ,因为这会破坏可移植性。 除非您有意尝试在全局范围内创建构造函数,否则您也不应提供declare的第一个字符串参数。

总之,您的模块定义应该是:

define(["dojo/_base/declare"], function(declare) {

   var module = declare([], {
      // Do Stuff
   }

   return module;
});

最后,关于构建层有两个重要的注意事项:

  1. 图层只是构建的模块,还包含其他模块。 它们只应从构建之前已存在于应用程序中的模块创建。 例如,如果您有一个用于加载整个应用程序的app/main模块,那么这将是一个很好的图层模块。 仅为新图层创建新的app/layerA模块是错误的。
  2. 在加载图层之前,加载程序无法知道图层包含哪些模块。 如果使用模块“a”“b”和“c”构建层“a”,则require([ "a", "b", "c" ]) ,所有三个模块将作为单独的请求加载,因为加载器不知道“a”包含“b”和“c”。 在这种情况下,您必须首先加载“a”,然后加载“b”和“c”,此时它们将从图层加载而不是单独加载。
  3. 除了在构建配置文件( dojo/dojo )中具有boot: true的一个层之外,必须以与任何其他模块相同的方式加载层 - 即使用requiredefine而不是通过包含<script>标记对于图层模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM