3

リージョンのあるレイアウトがあります。レイアウトが初期化されると、事前に設定されたビューをその領域に自動的に初期化し、レイアウト自体が表示/閉じられたときにそれを表示/閉じます。

https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.layout.mdからの現在の例:

AppLayout = Backbone.Marionette.Layout.extend({
  template: "#layout-template",    
  regions: {
    mainRegion: "#menu",
    content: "#content"
  }
});

var layout = new AppLayout();
ParentAppLayout.show(layout); // Render the Layout to a parent
layout.mainRegion.show(new SubView());

この例は、最初にレイアウトを表示する必要があることを示しています。その後、子ビューを初期化して表示できます。(上で、自体が表示されるSubView前にを表示するlayoutと、何も起こらないと思います。セレクターが DOM に存在しないためだと思いますか?)

再利用可能なレイアウトの場合、ビューが使用されているすべての場所に手動で追加し続けるのではなく、この送信ビュー ショーをレイアウト自体に追加したいと考えています。これはどのように達成できますか?

AppLayout = Backbone.Marionette.Layout.extend({
  template: "#layout-template",    
  regions: {
    mainRegion: "#menu",
    content: "#content"
  },
  initalize: function() {
     this.mainRegion.attachView(new SubView());  
  },
  onShow: function() {
     this.mainRegion.show(this.mainRegion.currentView);
  }
});

var layout = new AppLayout();
ParentAppLayout.show(layout); // Render the Layout to a parent, expecting the child view to also be created automatically

ただし、このアプローチも何もしません-エラーはありません。

4

1 に答える 1

5

これを行うのはどうですか

AppLayout = Backbone.Marionette.Layout.extend({
  template: "#layout-template",    
  regions: {
    mainRegion: "#menu",
    content: "#content"
  },
  onShow: function() {
     this.mainRegion.show(new SubView());
  }
});

var layout = new AppLayout();
ParentAppLayout.show();

それ以外の場合、作成に費用がかかる場合は、このようSubViewに行うことができますinitialize

initialize: function() {
  this.subView = new SubView();
}

後で で使用しonShowます。

于 2013-06-28T11:20:59.793 に答える