如何使用require({cache:{在dojo层中?

时间:2013-07-30 10:14:47

标签: javascript dojo amd dojo-build

在阅读标签后,我发现人们在定制构建时遇到了很多问题,所以我想到了自己创建构建。但是我无法找到构造Dojo AMD层时使用的语法参考,即:

require({cache:{"custom/MyModule":function () {
    define(["dojo/_base/lang"], function (lang) {

看起来缓存是模块名称是键的映射,值是函数,其中body是我的模块文件内容。

但我不完全理解下半部分:

}, "*now":function (r) {
    r(["dojo/i18n!*preload*custom/nls/all*[\"en\",\"de\",\"ROOT\"]"]);
}}});

这个“* now”也是一个关键,但它似乎有特殊的interprenation。我的模块中需要它吗?或者它是可选的?

define("custom/all", [], 1);

是最后一部分。正如我想的那样,即使不在任何地方直接引用图层模块,也必须进行此定义吗?

1 个答案:

答案 0 :(得分:2)

经过一些逆向工程:

cache对象包含已就地定义的模块映射。模块名称是键,值是调用define的函数(因此它是模块的内容)。

*now是一个特殊的关键字,它绝对不是必需的,但一旦存在,映射在该键下的函数将使用可用于调用其他require的函数执行,例如加载NLS文件。

  "*now":function (r) {
     console.log('*now is called with argument: '+r)
  } 

打印:

  

现在用参数调用:function(a1,a2,a3){                   return contextRequire(a1,a2,a3,module,result);               }

功能contextRequiredojo.js中定义。