I'我刚刚编译了一些dojo文件:如何在匿名包装器中调用函数

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

本文关键字:包装 调用 函数 文件 编译 dojo      更新时间:2023-09-26

我今天第一次编译我的一些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:

在我的主页视图中,我只需要调用入口点。以前它只是在窗口对象上,但现在不是了!如何从这个"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缓存中提取所有单独的依赖项,同时仍然向您提供main模块的返回值,因此您可以访问用于初始化应用程序的任何函数。