将Backbone模型和集合保存为JSON字符串

dch*_*tri 7 javascript jquery json save backbone.js

我在将Backbone.Model或Backbone.Collection对象保存到本地存储时遇到问题.问题是,当它保存时,只保存属性,我不希望这样.我实际上正在使用他们的示例TODO演示中提供的骨干 - 本地存储.

这是他们的保存功能

save: function() {          
    localStorage.setItem(this.name, JSON.stringify(this.data));
}
Run Code Online (Sandbox Code Playgroud)

当我看到JSON.stringify(this.data)返回的内容时,我只看到模型或集合的属性获取集合.有没有办法指定我想保存模型和集合所在的整个状态,而不仅仅是属性?

Edw*_*ith 12

重写Model.toJSON或Collection.toJSON以返回要序列化的数据.

默认的Model.toJSON只返回属性:

toJSON : function() {
  return _.clone(this.attributes);
}
Run Code Online (Sandbox Code Playgroud)

Collection的toJSON使用Model的toJSON:

toJSON : function() {
  return this.map(function(model){ return model.toJSON(); });
}
Run Code Online (Sandbox Code Playgroud)

  • 这就是JSON.stringify的工作方式.https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify"如果要进行字符串化的对象具有名为toJSON的属性,其值为函数,则toJSON方法会自定义JSON字符串化行为:而不是被序列化的对象,被调用时toJSON方法返回的值将被序列化." (2认同)