我有一个模型,它的属性之一是 Backbone 集合。
如果我输出模型,我可以看到集合,一切看起来都很好。
如果我将集合的结果输出到 JSON(),它显然会将整个集合对象输出为 json。
所以下面两行:
console.log('about to sync', model);
console.log('files', model.attributes.files.toJSON());
给出以下输出:
如您所见,集合在模型中存在且正确,但 toJSON 调用返回对象中的所有函数以及模型等,而不是“包含每个属性散列的数组集合中的模型"
最佳答案
默认情况下,Backbone 不处理子模型/集合,您必须插入所需的行为。在您的情况下,您只需覆盖模型上的 toJSON
即可用其数组表示形式替换集合。
有点像
var M = Backbone.Model.extend({
toJSON: function() {
var json = Backbone.Model.prototype.toJSON.call(this);
json.files = this.get('files').toJSON();
return json;
}
});
还有一个演示 http://jsfiddle.net/nikoshr/1jk8gLz4/
或者,如果您更喜欢更通用的更改,请更改 Backbone.Model.prototype.toJSON
以将此行为包含在所有模型中。例如
(function () {
var originalMethod = Backbone.Model.prototype.toJSON;
Backbone.Model.prototype.toJSON = function(options) {
var json = originalMethod.call(this, options);
_.each(json, function(value, key) {
if ((value instanceof Backbone.Collection) ||
(value instanceof Backbone.Model))
json[key] = value.toJSON();
});
return json;
};
})();
关于javascript - Backbone 集合 toJSON 返回集合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31873239/