Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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 在木偶中声明所有依赖项+;在创建应用程序之前,请先创建RequireJS应用程序_Javascript_Architecture_Requirejs_Marionette - Fatal编程技术网

Javascript 在木偶中声明所有依赖项+;在创建应用程序之前,请先创建RequireJS应用程序

Javascript 在木偶中声明所有依赖项+;在创建应用程序之前,请先创建RequireJS应用程序,javascript,architecture,requirejs,marionette,Javascript,Architecture,Requirejs,Marionette,我正在使用木偶和RequireJS构建一个新的应用程序,我有以下结构: /main.js -- Main require() call that includes app.js and calls Application.start() /app.js -- Application definition /modules /sub /controller.js -- Defines a sub-application, requires app.js ... 我

我正在使用木偶和RequireJS构建一个新的应用程序,我有以下结构:

/main.js -- Main require() call that includes app.js and calls Application.start()
/app.js -- Application definition
/modules
    /sub
        /controller.js -- Defines a sub-application, requires app.js
    ...
我试图在每个文件的顶层保留依赖项,而不是使用
require()
inline,这样
r.js
编译器就可以找到它们。问题是,在我的
controller.js
文件中,我需要
app.js
(为了添加初始值设定项),因此我不能在
app.js
中要求
controller.js
,直到
app.js
应用程序初始化后,这意味着我不能将
controller
放入顶级
define()
array

当前工作代码的简化示例:

// app.js
define(['marionette'], function(Marionette) {
    var Application = new Marionette.Application();
    Application.on("initialize:after", function() {
        require(['modules/sub/controller'], function() {
            Backbone.history.start();
        });
    });
});

// controller.js
define(['app'], function(Application) {
    Application.module('SubApplication', function(SubApplication, Application, Backbone, Marionette, $, _) {
        var router = Marionette.AppRouter.extend({
            appRoutes: { "foo": "bar" }
        });
        var controller = { foo: function() {} };
        Application.addInitializer(function() {
            new router({ controller: controller });
        });
    });
});

我对Require和木偶都还比较陌生,所以欢迎提出任何建议!我知道我可以通过
include
选项将我想要的文件包含到
r.js
中,但我认为这个问题还是值得问的。

我在我的示例中选择的方法是要求内联模块,这些模块仅是功能子集所必需的。这简化了开发,也意味着除非触发代码路径,否则不会加载模块

R.js会发现内联依赖关系很好(前提是它们被定义为字符串,即不是动态计算的)。此外,它们还可以使用(但不要忘记在构建文件中使用
findnestedependencies
选项)


希望这有帮助

谢谢你,大卫-我现在正在阅读你的两本书,但还没有真正进入《还魂曲》一书。:)很高兴知道r.js可以与内联依赖项一起工作——从文档中我不清楚这一点。