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

Marionette.CompositeView, how to pass parameters to Marionette.ItemView

本文关键字:Marionette 参数传递 ItemView CompositeView      更新时间:2023-09-26

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

也许一个选项是从Marionette.CompositeView传递一个参数(app.vent)给Marionette.ItemView

这是我的代码:

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

有什么想法吗?

附言:
我无法从itemView访问该应用程序,因为存在循环依赖问题。

app -> view/compositeView -> view/itemView

v0.9 添加了一个可用于此目的的itemOptions属性。它可以是对象文本,也可以是返回对象文本的函数。


Backbone.Marionette.CompositeView.extend({
  itemView: MyItemViewType,
  itemViewOptions: {
    some: "option",
    goes: "here"
  }
});

此属性返回的所有key: "value"对都将提供给初始值设定项中的项视图选项


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

有关详细信息,请参阅:

  • v0.9 的更新日志
  • itemViewOptions 的 CollectionView 文档 - 请注意,CompositeView 是从 CollectionView
  • 扩展而来的,因此所有 CollectionView 文档对 CompositeView 也有效
  • 构建项视图注释源代码
从木

偶 v2.0.0 开始,使用子视图选项而不是 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});

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