Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript I';我刚刚编译了一些dojo文件:如何在匿名包装器中调用函数?_Javascript_Dojo_Dojo Build - Fatal编程技术网

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

Javascript I';我刚刚编译了一些dojo文件:如何在匿名包装器中调用函数?,javascript,dojo,dojo-build,Javascript,Dojo,Dojo Build,今天我第一次整理我的dojo资料。为了简单起见,在与这个野兽搏斗时,我将我所有的东西(除了dojo.js)都编译到了这个名为all.js的文件中 但是在all.js中,我有一个完全密封在这个匿名函数中的入口点,我需要调用它,但是我不太清楚如何使用它 以下是文件的开头: require({cache:{ 'dojo/dom-geometry':function(){ define(["./sniff", "./_base/window","./dom", "./dom-style"],

今天我第一次整理我的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:
在我的主页视图中,我只需要调用入口点。以前它只是在窗口对象上,但现在不是了!如何从这个“缓存:”对象中调用Create.js文件函数

我试过:

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

但是create似乎是未定义的。

通常,在编译自定义层后,您访问函数的方式与以前相同-通过
require
define
获取对模块的引用,并传递模块的标识符。(这就是层内的代码继续工作的方式。)唯一的区别是,对于构建层,您只希望在加载层后执行此操作(否则加载程序将对您不希望它执行的单个模块发出请求,因为它应该通过层将所有模块一起加载)

如果您的层对应于一个顶级入口点,该入口点公开了您需要调用的函数,或者您将层直接构建到
dojo/dojo
中,以便在加载dojo.js时(下面将详细解释)所有模块都可用,那么您无需做任何特殊的事情-只需
要求(['app/myEntryPoint',function](entryPoint){…}
并在require回调中调用需要调用的函数

否则,如果您的层与公开您需要调用的函数的顶级入口点不对应,并且您编译了一个单独的层而不是直接构建到
dojo/dojo
,那么您需要在尝试与其他代码交互之前稍微改变一下,以确保您的层已加载,从而避免superfl对层中实际存在的各个模块的请求:

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
模块的返回值交给您,以便您可以访问用于初始化应用程序的任何函数。

看来我需要正确定义我的代码模块,以便它们可以相互调用。我想明天的任务是b正在解决这个问题。我认为您需要
定义
需要的
模块。您需要替换
需要({cache:{…
定义({cache:{….
。require用于require模块,define用于定义模块。define返回一个具有一组属性和方法的模块,这些属性和方法可用于与模块交互。能否在生成过程之前向我们展示
app/Activity/Create
的源代码。它应该包含
define
call.I think你是对的。我真的很高兴我在javascript变得太大之前编译了它。@frank,直接修改一个构建层模块应该是没有必要的。
require({cache:…})
调用是一种机制,通过该机制,层可以直接填充AMD加载程序的缓存,其要点是可以同时填充多个模块,以便稍后通过
require
define
引用其模块ID将从加载程序的缓存中加载它们,而不是实际生成服务器请求和trying单独加载每个文件。这个freenode dojo频道是获得帮助的更好地方吗?好吧,我已经减少了很多请求!我最终编译成了一个dojo文件。但是:仍然有很多xhr请求。例如,它是xhr请求dojo/sniff。但是dojo sniff肯定在新编译的dojo文件中。Wo无论是在这里还是在IRC上,我们都可能需要看到更多代码来帮助解决这个问题(即,试图加载层但最终仍然加载额外模块的页面看起来是什么样子).IRC通常在美国时区的白天活动,不过有时也会有一些来自新西兰地区或附近地区的人。我会看看自己能走多远,我还没有研究过很多构建选项。谢谢你的帮助,肯,我很感激!设置数据dojo config=“async:1”将我的dojo相关请求减少到2个:一个用于css文件,一个用于dojo.js。这太棒了!