基本情况是这样的:
我有一个复合视图和一个项目视图。我构建了 Composite 视图,传递给它一个模型和一个集合。模型数据用于填充复合视图的模板。集合数据用于填充复合视图的项目视图。
我想要做的是:在项目视图的模板助手中,我想访问复合视图的模型数据。我已经访问了项目视图的视图实例。我认为这可能会让我掌握复合视图,从那里我可以访问它的模型,但事实并非如此。
有没有一种方法可以做到这一点 - 从其项目视图实例之一访问复合视图实例?
Thanks
——贾斯汀·威利
如果您想访问父级的数据CompositeView
你可以做很多不同的事情。
要么将该数据直接传递给ItemView
通过itemViewOptions
上的辅助函数CompositeView
。注意:该选项已更改为childViewOptions
在《木偶2》中。
直接在所有子视图上调用方法CompositeView
并将您想要的任何内容传递到该方法中。
触发事件或监听事件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));
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)