将包含属性的Backbone集合序列化为JSON

时间:2014-02-12 19:04:04

标签: javascript json backbone.js backbone-collections

我想知道如何可以执行包含属性和模型的Backbone集合的JSON序列化。

所以每个例子如果我有这样的集合:

var myCollection = Backbone.Collection.extend({

   initialize: function (attr, options) {
      this.property = options.property;
   } 
});

尝试使用JSON.stringify(myCollection)函数进行字符串化时,stringify将调用Backbone Collection Object中定义的对象toJSON方法。 Backbone集合定义此方法如下:

toJSON : function() {
   return this.map(function(model){ return model.toJSON(); });
}

这意味着只有集合中包含的模型才会包含在结果JSON对象中,而不会包含在我之前定义的集合的属性中。

你知道这可以实现吗?

感谢。

编辑:在原始问题中可能不够清楚,我知道我可以覆盖toJSON方法我的问题是如何在一般事项中实现我所需要的(不仅仅是为了这个)特定属性,但想象我有另一个包含其他属性的集合,并且它们都从baseCollection对象继承。更多我想知道如何将该JSON对象恢复到主干原始状态(不确定是否通过创建一个新的在构造函数的参数中传递JSON对象的集合将使用此属性来实现)

2 个答案:

答案 0 :(得分:0)

您可以覆盖MyCollection类中的“toJSON”方法并返回所需的字符串。

答案 1 :(得分:0)

你可以覆盖像@ trunal-bhanse这样的toJSON方法,但如果你的目标是将这些数据与服​​务器同步,那么你应该找到一种更好的方法来表示这些数据。当您在一个实例上调用toJSON时,Backbone Collections默认返回一个数组。然后,在发送到服务器之前,使用JSON.stringify将该数组转换为字符串。但是,JSON.stringify方法不包含您在阵列上设置的任何属性:

var test = ["foo", "bar", "baz"];
test.Hello = "World!";
console.log(test);    //  ["foo", "bar", "baz", Hello: "World!"]
JSON.stringify(test); // '["foo", "bar", "baz"]'