【问题标题】:Marionette - How to access App region in ControllerMarionette - 如何在 Controller 中访问 App 区域
【发布时间】:2013-11-26 05:30:44
【问题描述】:

我有一个简单的主干应用程序,我想把它变成木偶。

已经在应用程序中定义了应用程序并在那里添加了区域,在初始化时也尝试获取 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;

控制器中的“header”无法访问,我想我什至打印了它即将为空的应用程序。

问题1. - 它不会创建App的循环依赖吗? 问题 2. - 为什么应用程序无法访问?

【问题讨论】:

  • 另外我认为大多数时候你会依赖 AppRouter 或 Controller 来呈现视图,而不是在 app.js 中完成。我本可以在 app.'s 中做到这一点,但我真的不认为这是个好主意。我经历了 - github.com/marionettejs/backbone.marionette/wiki/… 但这假设大部分依赖是由于发泄 - 我认为它也可以是创建依赖的区域/布局。

标签: backbone.js requirejs marionette


【解决方案1】:

我认为您应该将其添加到 mapp.js 文件中:

iApp.start();

【讨论】:

  • 好吧,它可能不在上面的代码中,但我的 main.js 中确实有 iApp.start()。代码运行良好。但我认为控制器是渲染视图的控制器。所以我需要在控制器中访问 iAPP 以便 - 我可以在 app.js 中添加的 iApp 区域上工作。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您可以在控制器的 index 方法中异步加载应用程序(无论您需要它),而不是将其添加为模块的依赖项

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      相关资源
      最近更新 更多