2012-06-30 9 views
21

Marionette.ItemViewからapp.ventにアクセスしたいと思います。Marionette.CompositeView、Marionette.ItemViewにパラメータを渡す方法

Marionette.ItemViewからMarionette.CompositeViewにパラメータ(app.vent)を渡すこともできます。

ここに私のコード:

// view/compositeView.js 
define([ 
    'marionette', 
    'views/item' 
], function (Marionette, itemView) { 
    var ListView = Marionette.CompositeView.extend({ 
     itemView: itemView 
    }); 
}); 

任意のアイデア?

P .:
循環依存性の問題があるため、itemViewからアプリにアクセスできません。

app -> view/compositeView -> view/itemView 

答えて

29

v0.9は、これに使用できるitemOptions属性を追加しました。これは、オブジェクトリテラルまたはオブジェクトリテラルを返す関数のいずれかです。



Backbone.Marionette.CompositeView.extend({ 
    itemView: MyItemViewType, 

    itemViewOptions: { 
    some: "option", 
    goes: "here" 
    } 

}); 

あなたは、各itemViewインスタンスの固有のコードを実行する必要がある場合は、この属性によって返されるkey: "value"ペアのすべてが、TEH初期化子さらに


Backbone.Marionette.ItemView.extend({ 
    initialize: function(options){ 
    options.some; //=> "option" 
    options.goes; //=> "here" 
    } 
}); 

でitemviewのオプションに供給されますbuildItemViewメソッドをオーバーライドして、コレクション内の各オブジェクトのアイテムビューをカスタム作成することができます。


    buildItemView: function(item, ItemView){ 

    // do custom stuff here 

    var view = new ItemView({ 
     model: item, 
     // add your own options here 

    }); 

    // more custom code working off the view instance 

    return view; 
    }, 

詳細については、以下を参照してください。

にもCompositeViewのために有効で、そのCompositeViewのはCollectionViewから拡張に注意
+7

_itemViewOptions_がもう使用されていないため、今すぐ_childViewOptions_を使用する必要があります。 – DiegoG

13

Marionette v2.0.0以降、childViewOptionsは、子ビューにパラメータを渡すためにitemViewOptionsの代わりに使用されています

イベントと連携することではなく、
var MyCompositeView = Marionette.CompositeView.extend({ 
    childView: MyChildView, 
    childViewOptions: function(model, index) { 
    return { 
     vent: this.options.vent 
    } 
    } 
}); 

var MyChildView = Marionette.ItemView.extend({ 
    initialize: function(options) { 
     // var events = options.vent; 
    } 
}); 

new MyCompositeView({ vent: app.vent, collection: myCollection}); 

は、代わりにビューにapp.ventを渡すのMarionette.Radioを使用することができます。

関連する問題