如何使Backbones toJSON功能包括子模型和集合?

时间:2013-06-11 17:17:15

标签: backbone.js

我有一些模型不仅包含基本数据属性,但它们可能有一个或两个属性来保存另一个模型对象。

这没关系,但现在我想打电话

myRootModel.toJSON()

并且我注意到它没有在我的模型中的其他模型上调用.toJSON,我试图调用toJSON()。

有没有办法覆盖骨干模型.toJSON遍历所有字段,递归,无论它们是基本属性,子模型还是集合?如果没有,我可以在每个模型/集合中覆盖toJSON吗?

我知道骨干关系,但我不想走那条路 - 我没有使用fetch / save,而是我们的API返回我在模型解析函数中调整的响应,只需调用new MyRootModel (数据,{解析:真})。

2 个答案:

答案 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;
};

http://jsfiddle.net/2Asjc/

答案 1 :(得分:5)

调用JSON.parse(JSON.stringify(model))递归地解析具有所有子模型和子集合的模型。试用Backbone版本1.2.3。