【问题标题】:Backbone collection toJSON returning collection object骨干集合 toJSON 返回集合对象
【发布时间】:2015-08-07 08:39:16
【问题描述】:

我有一个模型,它有一个主干集合作为它的属性之一。

如果我输出模型,我可以看到集合并且一切正常。

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

所以下面两行:

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

给出以下输出:

如您所见,集合在模型中存在且正确,但 toJSON 调用返回对象中的所有函数以及模型等,而不是“包含每个属性哈希的数组”集合中的模型”

【问题讨论】:

    标签: javascript json backbone.js


    【解决方案1】:

    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/

    【讨论】:

      【解决方案2】:

      Tom,完成 toJSON() 后,您需要遍历对象中的每个元素才能查看内容。我也面临同样的问题。了解如何解析 JSON 对象。打印时会有任何问题。

      希望这会有所帮助!

      谢谢

      【讨论】:

        【解决方案3】:

        覆盖 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;
            }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多