2013-11-26 32 views
1

我有一個簡單的骨幹應用程序,我試圖變成Marionette。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' 
     } 

....

現在控制器試圖訪問應用區域等等我可以加載視圖如下:

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:它不會創建應用程序的循環依賴嗎? 問題2. - 爲什麼App不可用?

+0

此外,我想大部分的時間你將取決於AppRouter或Controller來渲染視圖,以反對在app.js中完成。我本可以在應用程序中做到這一點,但並不認爲這是個好主意。我經歷了 - https://github.com/marionettejs/backbone.marionette/wiki/Using-marionette-with-requirejs,但是這個假設大部分的依賴是由於發泄 - 我認爲它可以是區域/佈局也創造依賴關係。 – skumar

回答

0

我想你應該加入到mapp.js文件這樣的:

iApp.start(); 
+0

那麼它可能不在上面的代碼中,但我的i.App.start()在我的main.js中。代碼運行良好。但是我認爲控制器就是呈現視圖的控制器。所以我需要在控制器中訪問iAPP,以便 - 我可以在我已添加到app.js的iApp區域上工作。 – skumar

相關問題