javascript - Backbone 集合 toJSON 返回集合对象

标签 javascript json backbone.js

我有一个模型,它的属性之一是 Backbone 集合。

如果我输出模型,我可以看到集合,一切看起来都很好。

如果我将集合的结果输出到 JSON(),它显然会将整个集合对象输出为 json。

所以下面两行:

console.log('about to sync', model);
console.log('files', model.attributes.files.toJSON());

给出以下输出:

Console output in Chrome 44

如您所见,集合在模型中存在且正确,但 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;
    };
})();

http://jsfiddle.net/nikoshr/1jk8gLz4/2/

关于javascript - Backbone 集合 toJSON 返回集合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31873239/

相关文章:

javascript - 如何将一个字符串分割成n个字符的段?

javascript - Backbone Scope 访问变量的最佳实践

javascript - Backbone 中集合/有序集的数据结构是什么?

javascript - 即使已经在另一个选项卡中登录,新选项卡也会打开登录页面

javascript - 英特尔 XDK 警报 API 不起作用

Javascript/Jquery : Show and hide a Loading Screen message

javascript - 使用 jQuery 过滤数组

c - 如何从 json 字符串中获取值?

javascript - node.js 请求 POST 数组 "first argument must be string or buffer"

javascript - 在Javascript中将数组设置为json格式的值