Backbone.js 在把手模板中渲染主干子模型
我有模型和子模型:Backbone.js 在把手模板中渲染主干子模型,backbone.js,marionette,handlebars.js,backbone-model,Backbone.js,Marionette,Handlebars.js,Backbone Model,我有模型和子模型: var Field = Backbone.Model.extend(); var MetaField = Backbone.Model.extend(); var metaField = new MetaField({ title: 'width' }); var field = new Field({ meta: metaField, value: 5}); 我想通过车把模板渲染这个模型(视图代码是ommited) 模板如下所示: 字段:{{meta.get('titl
var Field = Backbone.Model.extend();
var MetaField = Backbone.Model.extend();
var metaField = new MetaField({ title: 'width' });
var field = new Field({ meta: metaField, value: 5});
我想通过车把模板渲染这个模型(视图代码是ommited)
模板如下所示:
字段:{{meta.get('title')}}值:{{value}
}
但是meta.get会导致错误(据我所知,在Handlebar中无法调用方法)。如何渲染元属性?我应该将MetaField对象抛出到模板上下文吗 你必须找到解决这个问题的方法,无论是在你的模型中还是在你的视图中,这取决于你选择的方法它将改变你的改变范围 1.在您的模型中 这将始终将元对象包含在序列化字段对象中。将模型发送到服务器或在任何视图中渲染时都将使用它 2.在你看来 这仅适用于视图,不会影响其他视图呈现模型或将模型发送到服务器的方式 模板 您可以像这样在模板中使用
meta
属性
字段:{{meta.title}}值:{{value}
错误是什么?如何将这两个模型传递给视图?问题是toJSON()函数不会递归地遍历子模型。你必须实施这种行为;这将有助于:)然后您可以像这样访问它:{{meta.title}
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();
}
}
});