用requirejs启动牵线木偶模块

时间:2014-01-08 13:44:50

标签: javascript requirejs marionette

对于使用带有marionettejs的requirejs,我真的不太了解。

所以我正在尝试使用带有requirejs的牵线木偶模块。

//app.js
define(["marionette"], function(Marionette){

    var App = new Marionette.Application();
    App.startSubApp = function(appName, args) {...}
    App.on("initialize:after", function(){
        require(["app/module1"], function () {
            Backbone.history.start();
            App.startSubApp("module1");
        });
    }
});



//module1.js
define(["app"], function(App){

    App.module("module1", function(Module1, App, Backbone, Marionette, $, _){
        Module1.startWithParent = false;

        Module1.onStart = function(){
            console.log("starting module1");
        };
    }


});

问题是onStart处理程序从未被触发,因为在App.startSubApp中,module1已经被实例化。

我设法通过调用module1.js中的startSubApp来解决问题:

//app.js
define(["marionette" , 'vent'], function(Marionette, vent){

    var App = new Marionette.Application();
    App.startSubApp = function(appName, args) {...}
    App.on("initialize:after", function(){
        require(["app/module1"], function () {
            Backbone.history.start();
            vent.trigger("start:module1");
        });
    }
});


//module1.js
define(["app",'vent'], function(App, vent){

    App.module("module1", function(Module1, App, Backbone, Marionette, $, _){
        Module1.startWithParent = false;
        Module1.onStart = function(){
            console.log("starting module1");
        };
    }
    vent.on('start:module1', function(){
        App.startSubApp("module1");
    });
});

我对requirejs和marionettejs都相当新,所以有人可以向我解释这种行为的原因吗?

1 个答案:

答案 0 :(得分:0)

如果您尝试在应用(或模块)启动时运行代码,则两者都有初始值设定回调,您可以使用app.addInitializer()module.addInitializer()

添加