Marionette.CompositeView,如何将参数传递给Marionette.ItemView

Lor*_*ard 21 javascript backbone.js marionette

我想从Marionette.ItemView访问app.vent.

也许一个选项可能是将参数(app.vent)传递Marionette.ItemViewMarionette.CompositeView.

这是我的代码:

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

有任何想法吗?

PS:
我无法从itemView访问应用程序,因为存在循环依赖性问题.

app -> view/compositeView -> view/itemView
Run Code Online (Sandbox Code Playgroud)

Der*_*ley 29

v0.9添加了一个itemOptions可用于此的属性.它可以是对象文字或返回对象文字的函数.



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

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

});
Run Code Online (Sandbox Code Playgroud)

key: "value"此属性返回的所有对都将提供给初始化程序中的itemview选项


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

此外,如果需要为构建的每个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;
  },
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:

  • _itemViewOptions_不再使用,您必须立即使用_childViewOptions_. (7认同)

Die*_*goG 13

由于木偶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});
Run Code Online (Sandbox Code Playgroud)

但是要使用事件,让我们使用Marionette.Radio而不是将app.vent传递给视图.