我有一些模型不仅包含基本数据属性,但它们可能有一个或两个属性来保存另一个模型对象。
这没关系,但现在我想打电话
myRootModel.toJSON()
并且我注意到它没有在我的模型中的其他模型上调用.toJSON,我试图调用toJSON()。
有没有办法覆盖骨干模型.toJSON遍历所有字段,递归,无论它们是基本属性,子模型还是集合?如果没有,我可以在每个模型/集合中覆盖toJSON吗?
我知道骨干关系,但我不想走那条路 - 我没有使用fetch / save,而是我们的API返回我在模型解析函数中调整的响应,只需调用new MyRootModel (数据,{解析:真})。
答案 0 :(得分:16)
这是一种你可以实现这种事情的方式(也许还有另一种方式):
Backbone.Model.prototype.toJSON = function() {
var json = _.clone(this.attributes);
for(var attr in json) {
if((json[attr] instanceof Backbone.Model) || (json[attr] instanceof Backbone.Collection)) {
json[attr] = json[attr].toJSON();
}
}
return json;
};
答案 1 :(得分:5)
调用JSON.parse(JSON.stringify(model))
递归地解析具有所有子模型和子集合的模型。试用Backbone版本1.2.3。