2014-10-17 90 views
2

延伸的佈局圖我創建這樣一個觀點:失敗在骨幹木偶

var MyView = Marionette.LayoutView.extend({ 
    template: #someTemplate, 
    regions: function() { 
     return { 
      someRegions: '.Regions', 
     }; 
    }, 

    initialize: function(options) { 
     if (options) { 
      do stuff... 
     } 
    }, 

    onRender: function() { 
     var titleBar = new Bar({ options: "options" }); 
     this.barRegion.show(titleBar); 
    } 
}); 

它基本上具有與一些按鈕的頂棒的圖。

現在,我需要創建一大堆具有相同的頂級酒吧不同的看法,所以我希望能夠做這樣的事情:

var SecondView = MyView.extend({ 

    template: #template, 

    onRender: function() { 
     create content below top bar here... 
    } 
}); 

當我添加斷點我看到MyView的的初始化&渲染函數不被調用,只有我的SecondView的初始化和渲染函數被調用。

所以頂部欄不顯示,實際上MyView的模板沒有出現。只有SecondView出現。

我在這裏錯過了什麼?

在此先感謝...

+0

您是否未包括所有相關的代碼?我沒有看到爲SecondView定義的任何初始化或渲染方法,所以當你說「只有我的SecondView的初始化和渲染函數被調用」時,你是什麼意思? – kinakuta 2014-10-17 15:29:00

回答

0

謝謝大家誰試圖幫助我這個...

所以對於誰可能會感興趣的是什麼,我試圖做的,這是我得到它的工作:

從SecondView的initialize方法我不得不打電話MyView的的初始化方法:然後

initialize: function(options) { 

     MyView.prototype.initialize.call(this, options); 

    } 

,從SecondView的方法的OnRender我不得不打電話MyView的的方法的OnRender:

onRender: function() { 

     MyView.prototype.onRender(this); 

     // extra content for my SecondView goes here... 

     var secondViewContent = new Content(); 
     this.someRegionInMyView.show(secondViewContent); 
    } 
0

的問題是,你的onRender在你的第二個觀點方法重寫第一個,所以只有你SecondView.onRender代碼被執行。

我想你在這裏採取了錯誤的做法。創建一個包含常用頂欄的佈局,併爲其下方的視圖添加另一個區域。如果該視圖是另一個佈局是可以的。

圖形:

MainLayout --Topbar地區 --SecondBar地區

你可以讓你MainLayout是應用的區域,並使用你的路由器或任何機構所需要的視圖裝入SecondBar地區。

,真希望是有道理的。 ;)

如果你堅持使用繼承,然後從你的MainView OnRender將調用第二個方法,是這樣的:

onRender: function() { 
    var titleBar = new Bar({ options: "options" }); 
    this.barRegion.show(titleBar); 
    //hook for child views 
    this.triggerMethod("onSecondRender"); 
} 

然後移動onRender代碼onSecondRender你的孩子的意見。