8

の使用方法について根本的な誤解があると思いますMarionette.Layout

私はこのようなことをしようとしています:

ここに画像の説明を入力

レイアウトには、 Marinotette.ItemView「Explode」ItemViewと「PopStar」の 2 つの が含まれてい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

ありがとう!

4

1 に答える 1

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)は不要であることに注意してください。

于 2012-08-15T22:35:27.683 に答える