我想围绕如何呈现多个ItemViews,每个具有不同的模型和模板,在一个CollectionView中。 Marionette.js文档指定CollectionView支持单个ItemView。我做错了这个假设还是可以让CollectionView支持这个?如果不是,建议什么?预先感谢您的帮助。Marionette.js渲染多个ItemViews与不同的模型+模板在CollectionView
UPDATE:
添加以下代码:
privObj.propertiesSubPanelView = new Marionette.CollectionView({
el: options.el,
collection: col,
getItemView: function(item) {
console.log(item);
}
});
privObj.propertiesSubPanelView.render.done(function() {
console.log('Im done');
});
即给予以下错误:
An `itemView` must be specified
更新#2:
我已经实现了getItemView在CollectionView中的功能如下:
var ColView = Marionette.CollectionView.extend({
collection: col,
itemViews: views,
getItemView: function(item) {
var viewId,
itemViewObj,
itemView;
viewId = item.get('name');
itemViewObj = Marionette.getOption(this, 'itemViews');
itemView = itemViewObj[viewId];
if (_.isUndefined(itemView)) {
throw new Error('No view associated with name: ' + viewId);
}
return itemView;
}
});
var colView = new ColView();
var propLayout = new PropLayout();
propLayout.properties.show(colView);
不过,我不会收到以下错误:(遗漏的类型错误的对象不是一个函数):
Marionette.CollectionView.buildItemView: function(item, ItemViewType, itemViewOptions){
var options = _.extend({model: item}, itemViewOptions);
return new ItemViewType(options); <<== this line!
}
我错过了什么或者这是一个错误?
更新#3
这是我的主要功能...
newPropertiesSubPanelCollection: function(col, views) {
var labelModel1 = new Backbone.Model({
name: 'Properties',
value: 'Properties',
data: undefined
});
var labelView1 = new Label_.Item();
var labelModel2 = new Backbone.Model({
name: 'Configure',
value: 'Properties',
data: undefined
});
var labelView2 = new Label_.Item();
var col = new Backbone.Collection();
col.add(labelModel1);
col.add(labelModel2);
var views = {};
views['Properties'] = labelView1;
views['Configure'] = labelView2;
var ColView = Marionette.CollectionView.extend({
collection: col,
itemViews: views,
getItemView: function(item) {
var viewId,
itemViewObj,
itemView;
viewId = item.get('name');
itemViewObj = Marionette.getOption(this, 'itemViews');
itemView = itemViewObj[viewId];
if (_.isUndefined(itemView)) {
throw new Error('No view associated with name: ' + viewId);
}
return itemView;
}
});
var colView = new ColView();
return this.propertiesSubPanelCollection = colView;
},
我的答案用的jsfiddle说明概念更新。 –