Marionette - 如何在Controller中访问App区域

时间:2013-11-26 05:30:45

标签: backbone.js requirejs marionette

我有一个简单的骨干应用程序,我试图变成木偶。

在应用程序中定义了应用程序并在那里添加了区域,同样在初始化时尝试获取AppRouter如下:

   iApp.addInitializer(function(options){
        // Add Router
        iApp.addRouter = new Mrouter();
    });
    iApp.on("start", function(options){
           Backbone.history.start();
    });
    iApp.addRegions({
        header : "#mainheader"
    });

Now in AppRouter added a method referenced in controller as below:
    define([
   'marionette',
   'backbone',
   'jquery',
    'controller/controller'   

   ],function(Marionette,Backbone,Router,Controller){
   var appRouter = Marionette.AppRouter.extend({
        controller : new Controller(),
        appRoutes : {
            '' : 'mainpage'
        }

...

现在在Controller中尝试访问App区域,以便我可以加载视图,如下所示:

define([
'marionette',
'backbone',
'underscore',
'jquery',
'../views/subviews/mheader',
'../mapp'
], function(Marionette,Backbone,_,$,Mheader,Iapp){

            var iController = Marionette.Controller.extend({
                initialize : function() {
                    console.log("Initialzier");
                },
                mainpage : function() {
                    Iapp.header.show(new Mheader());
                    // Add region or fix the view.
                },
                onClose : function() {
                    console.log("closing the contoller");

                }                
            });    
            return iController;

控制器中的“标题”无法访问,我想我甚至打印了它即将出现的应用程序。

问题1. - 它是否不会创建App的循环依赖? 问题2. - 为什么App无法访问?

3 个答案:

答案 0 :(得分:0)

我认为你应该把它添加到mapp.js文件中:

iApp.start();

答案 1 :(得分:0)

实际上我能够让这个工作,正如帖子建议的那样 - https://github.com/marionettejs/backbone.marionette/wiki/Using-marionette-with-requirejs - 我添加了require(mapp),它基本上确保了应用程序的负载。我很高兴我和木偶一起搬家。

答案 2 :(得分:-1)

您可以在控制器的索引方法(在任何需要的地方)内异步加载应用程序,而不是将其添加为模块的依赖项

从下面回答 https://stackoverflow.com/a/42271316/911804