У меня есть модель, у которой есть массив, позволяющий называть их блоки. Все блоки имеют атрибут block-header. В зависимости от того, какой атрибут блока-заголовка у меня есть, мне нужно управлять представлением/моделью по-другому. Поэтому им интересно, как я мог бы использовать композитный или коллекционный вид в marrionette для визуализации коллекции блоков, используя разные шаблоны в зависимости от заголовка блока в каждой модели.Как динамически выбирать вид элементов для моделей в Marrionette Composite View
Моя текущая работа вокруг, как это:
App.view.external_report.TemplateSetup = Marrionette.CompositeView.extend({
__name__: 'ExternalReport$TemplateSetup',
template: 'external_report/templatesetup',
className: 'external-report',
super: App.view.CompositeView.prototype,
id: 'template-setup',
events: {
'click #cancel': 'cancel',
'click #save': 'save'
},
initialize: function(options) {
if (!this.model || !this.model.get('template')) throw 'No model or template found';
var templateObj = JSON.parse(this.model.get('template'));
var blocks = templateObj.SubBlocks;
this.blockViews = [];
_.each(blocks, function(block) {
var model = new Backbone.Model(block);
this.blockViews.push(new App.view.external_report.blocks.BaseBlock({
model: model
}))
}.bind(this));
},
onRender: function() {
_.each(this.blockViews, function(blockView) {
blockView.render().then(function() {
this.$el.append(blockView.$el);
}.bind(this));
}.bind(this));
},
save: function() {
this.model.set('template', JSON.stringify(this.generateTemplate()));
this.model.save().then(function() {
//placeholder
}.bind(this));
},
generateTemplate: function() {
var template = JSON.parse(this.model.get('template'));
template.SubBlocks = [];
_.each(this.blockViews, function(blockView) {
template.SubBlocks.push(blockView.generateBlockJSON());
}.bind(this));
return template;
}
});
Возможный дубликат [Магистраль макинтошей разных композитных видов] (http://stackoverflow.com/questions/18684567/backbone-marionette-different-composite-views) –