我刚刚编译了一些 dojo 文件:How do I call a function inside the anonymous wrapper?

I've just compiled some dojo files together: How do I call a function inside the anonymous wrapper?

我今天第一次编译我的一些 dojo 东西。为了简单起见,在与这只野兽战斗时,我将我所有的东西(dojo.js 除外)编译到这个名为 all.js.

的文件中

但在 all.js 中,我有一个完全密封在我需要调用的匿名函数中的入口点,但我不太清楚如何获得它。

这是文件的开头:

require({cache:{
'dojo/dom-geometry':function(){
 define(["./sniff", "./_base/window","./dom", "./dom-style"],
    function(has, win, dom, style){
// module:
//      dojo/dom-geometry

// the result object
var geom = {
    // summary:
    //      This module defines the core dojo DOM geometry API.
};
//dom-geometry continues on for awhile....

还有我感兴趣的部分,在线14798!如何调用 CreateActivityEntryPoint?

   //end of previous part
    return singleton;
});

},
'app/Activity/Create':function(){


function CreateActivityEntryPoint()
{
    //do things here.
}

这是后面的部分:

}, //closing bracket of Activity/Create anon function
'dojo/dom-attr':function(){
define(["exports", "./sniff", "./_base/lang", "./dom", "./dom-style", "./dom-prop"],
        function(exports, has, lang, dom, style, prop){
    // module:

在我的主页面视图中,我只需要调用入口点。以前它只是在 window 对象上,但现在不是了!如何从此 "cache:" 对象调用 Create.js 文件函数?

我试过:

require(["app/Activity/Create"], function (create) {
          create.CreateActivityEntryPoint();
      });

但似乎 create 未定义。

通常,您在编译自定义层后以与以前相同的方式访问函数 - 通过 requiredefine 获取对模块的引用并传递模块的标识符。 (这也是层内代码继续工作的方式。)唯一的区别是,对于构建层,您只想在层加载后执行此操作(否则加载程序最终会请求您创建的各个模块实际上不希望它生成,因为它应该通过图层将它们一起加载)。

如果您的图层对应于公开您需要调用的函数的顶级入口点,您可以将您的图层直接构建到 dojo/dojo 中,以便所有您的模块在 dojo.js 加载后立即可用(下面会详细解释),您不需要做任何特别的事情 - 只需 require([ 'app/myEntryPoint' ], function (entryPoint) { ... }) 并在 require 回调中调用您需要调用的函数。

否则,如果您的层不对应于暴露您需要调用的函数的顶级入口点,并且您编译一个单独的层而不是直接构建到dojo/dojo,您将需要去在尝试与其他代码交互之前确保加载层有点麻烦,以避免对实际位于层中的单个模块的多余请求:

require([ 'app/layer' ], function () {
    require([ 'app/moduleWithEntryPoint' ], function (moduleWithEntryPoint) {
        moduleWithEntryPoint.entryPoint(...);
    });
});

此回复的其余部分讨论了理想的构建配置文件配置。

为了便于维护和使用,通常推荐的组织层的方法是围绕应用程序的顶级入口点模块创建一个层;理想情况下,这个入口点将传递地包括应用程序的所有依赖项。例如,app/main 可能是您的入口点;它可能取决于 app/UI 这是您的顶级应用程序小部件,这将取决于更多的小部件、商店等,并且依赖链将继续向下。

围绕顶级模块定义层非常简单,因为构建会自动包含层的模块 ID 引用的模块,并自动包含所有传递依赖项:

layers: {
    'app/main': {}
}

不过,要进一步减少请求,您可以将这一层直接构建到 dojo.js:

layers: {
    'dojo/dojo': {
        boot: true, // This layer includes the Dojo loader
        customBase: true, // Override the default of including all of dojo/_base
        include: [ 'app/main' ]
    }
}

在任何一种情况下,当您执行 require([ 'app/main' ], function (app) { ... }) 时,它最终会从 require 缓存中提取所有单独的依赖项,同时仍将 return 的值交给您22=] 模块,因此您可以访问用于初始化应用程序的任何函数。