我有一个模型,它有一个骨干集合作为其属性之一。
如果我输出模型,我可以看到该集合,所有看起来都没问题。
如果我将集合的结果输出到JSON(),它显然会将整个集合对象输出为json。
以下两行:
console.log('about to sync', model);
console.log('files', model.attributes.files.toJSON());
提供以下输出:
如您所见,集合在模型中存在且正确,但toJSON调用返回对象中的所有函数以及模型等,而不是“包含每个函数的属性哈希的数组”集合中的模型“
答案 0 :(得分:2)
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;
};
})();
答案 1 :(得分:0)
Tom,你需要遍历对象中的每个元素,以便在完成toJSON()之后查看内容。我也面临同样的问题。了解如何解析JSON对象。打印时会有任何问题。
希望这会有所帮助!!
由于
答案 2 :(得分:0)
覆盖toJSON方法。
var yourModel = Backbone.Model.extend({
toJSON: function(){
var base = Backbone.Model.prototype.toJSON.call(this);
for (key in base) {
item = base[key];
if (item.toJSON != null) {
base[key] = item.toJSON();
}
}
return base;
}
});