8

私は、Marionette.Layoutの使用を意図していると根本的に誤解していると思います。Backbone.jsのMarionetteでのレイアウトの理解

私はこのような何かをしようとしている:

enter image description here

レイアウトは2つのMarinotette.ItemView Sが含まれています。 "爆発" ItemViewと "ポップスター" ItemView。このレイアウトは、常にこれらのビューを含むように設計されたので、私はこれを行うために試みられている。

var TheLayout = Backbone.Marionette.Layout.extend({ 
    template: '#the=layout-template', 
    regions: { 
     explode: '#explode-region', 
     popstar: '#popstar-region' 
    } 
    initialize:function(options){ 
     _.bindAll(this); 

     var explodeView = new ExplodeView(); 
     this.explode.show(explodeView);  // <-- This throws and exception because the regions are not available yet 

    } 
}) 

しかし領域はレイアウトがレンダリングされるまでは利用できないように見えます。ビューを追加する前にthis.render()と呼んでみましたが、これは機能しませんでした。ここでの根本的な問題は、間違った状況でレイアウトを適用していることです。

この場合、どうすればよいですか? Marionette.Layoutを使用する正しい時期はいつですか?

ありがとうございます!

答えて

17

レイアウトのonRenderメソッドで領域ビューを表示します。コード:

var TheLayout = Backbone.Marionette.Layout.extend({ 
    template: '#the=layout-template', 
    regions: { 
     explode: '#explode-region', 
     popstar: '#popstar-region' 
    } 
    onRender: function() { 
     var explodeView = new ExplodeView(); 
     this.explode.show(explodeView); 
    } 
}) 

この場合、_.bindAll(this)は必要ありません。

+1

'_.bindAll(this)'に関して、私はまだそれをどのような場合に使用するのか、どのような場合にしないのか混乱しています。 – CodeRain

+4

イベントハンドラやonRender、onCloseなど、Marionetteから直接呼び出されるほとんどのメソッドでは、コンテキストはMarionetteによって正しく設定されており、 'bindAll'は必要ありません。他の誰かがあなたのメソッドを呼び出している場合は、AJAXからのjQueryコールバックやjqueryを使って直接バインドされたイベントなど、コンテキスト 'this'をビューにしたい場合は' _.bindAll(this、 'myfunc') '友人。 –

+0

保存日: – SAR