21

Marionette.ItemViewからapp.ventにアクセスしたいと思います。

たぶん、オプションはパラメータ(app.vent)をMarionette.ItemViewからに渡すことかもしれませんMarionette.CompositeView

ここに私のコード:

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

何か案は?

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

app -> view/compositeView -> view/itemView
4

2 に答える 2

29

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



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

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

});

この属性によって返されるすべてのkey: "value"ペアは、初期化子のitemviewのオプションに提供されます。


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;
  },

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

于 2012-06-30T16:09:22.640 に答える
14

Marionette v2.0.0以降、itemViewOptionsの代わりにchildViewOptionsを使用して、パラメーターを子ビューに渡します。

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を使用します。

于 2015-04-01T23:40:40.163 に答える