如何从Backbone Marionette中的项目视图实例访问复合视图

29 backbone.js marionette

基本情况是这样的:

我有一个复合视图和一个项目视图.我构造了Composite视图,为它传递了一个模型和一个集合.模型数据用于填充Composite视图的模板.集合数据用于填充复合视图的项视图.

我想要做的是:在Item视图的模板助手中,我想访问Composite View的模型数据.我已经访问了项目视图的视图实例.我认为这可能会让我对复合视图有所了解,从中可以看到它的模型,但事实并非如此.

有没有办法可以做到这一点 - 从一个项目视图实例访问复合视图实例?

谢谢

--Justin Wyllie

And*_*bbs 33

如果要从父级访问数据,CompositeView可以执行许多不同的操作.

  1. 将数据直接传递给ItemView通过itemViewOptions辅助函数CompositeView.注意:此选项已更改为childViewOptionsMarionette 2.

  2. 直接在所有子视图上调用方法CompositeView,并将所需的任何内容传递给该方法.

  3. 触发事件或由其监听ItemView.

这些选项都不是直接从子视图访问父视图,而是应该按照您的意愿执行.下面是如何使用这些方法将CompositeView模型传递给子视图的代码.

// Pass model into ItemView on init
var MyItemView = Backbone.Marionette.ItemView.extend({
  initialize : function (options) {
    this.parentsModel = options.parentsModel;
  }
});
var MyCompView = Backbone.Marionette.CompositeView.extend({
  itemViewOptions : function () { return { parentsModel: this.model }; }
  itemView : MyItemView
});


// Invoke function on ItemView, passing data in
var MyItemView = Backbone.Marionette.ItemView.extend({
  doSomethingWithParent : function (parentModel) {
    // do cool thing with parentModel
  }
});
var MyCompView = Backbone.Marionette.CompositeView.extend({
  itemView : MyItemView,
  onRender : function () {
    this.children.call("doSomethingWithParent", this.model);
  }
});


// Trigger event that ItemView knows about
var MyItemView = Backbone.Marionette.ItemView.extend({
  initialize : function () {
    this.listenTo(this, "special:event", function (parentModel) {
      // Do cool things
    });
  }
});
var MyCompView = Backbone.Marionette.CompositeView.extend({
  itemView : MyItemView,
  onRender : function () {
    this.children.each(_.bind(function (childView) {
      childView.trigger("special:event", this.model);
     }, this));
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解释.谢谢! (3认同)
  • 谢谢.您清楚地理解我的问题 - 如何将父模型放入子项的每个实例中.所有3个选项都很有用. (2认同)
  • 请注意,从Marionette 2开始,``itemViewOptions``已重命名为``childViewOptions``(以及CollectionView/CompositeView中对``itemView``的所有其他引用) (2认同)