我有模型和子模型:
var Field = Backbone.Model.extend();
var MetaField = Backbone.Model.extend();
var metaField = new MetaField({ title: 'width' });
var field = new Field({ meta: metaField, value: 5});
我想通过把手模板渲染这个模型(查看代码是无限的)
模板看起来像这样:
field: {{ meta.get('title') }} value: {{ value }
}
但是meta.get导致错误(据我所知,没有能力在把手中调用方法)。如何呈现元属性?我应该将MetaField对象抛出到模板上下文吗?
答案 0 :(得分:3)
您必须在视图中的模型中解决此问题,具体取决于您选择的方法,它将改变您的更改范围。
这将始终将元对象包含在序列化的Field对象中。它将在将模型发送到服务器或在任何视图中呈现时使用。
var Field = Backbone.Model.extend({
toJSON : function(){
var json = _.clone(this.attributes);
if(this.get('meta'){
json.meta = this.get('meta').toJSON();
}
return json;
}
});
这只适用于视图,不会影响其他视图呈现模型或发送到服务器的方式
var FieldView = Marionette.ItemView.extend({
//return value of this function is merged with the data
//that is passed to your template
templateHelpers: function(){
return {
meta: this.model.get('meta').toJSON();
}
}
});
您可以使用模板中的meta
属性,
field: {{ meta.title }} value: {{ value }}