Backbone Collection 当 API returns 没有数据时添加空 object

Backbone Collection adding empty object when API returns no data

我有以下问题:我的 API returns null - 没有可用数据。 (那挺好的!)。我的 collection 获取数据但创建一个空的 object.

我的 API 结果(来自 Firebug):

{"data":{"objects":null}}

我的collection:

var MyCollection = Backbone.Collection.extend({
    model: MyModel,
    url: '/v1/ajax/load-objects',

    parse: function(resp, xhr) {
        return resp.data.objects;
    }
});

当我在视图中打印 self.model.toJSON() 时(模型是 collection),我得到了这个(通过 Firebug):

 [Object {}]

我的问题:为什么 collection 在我的 collection 中放入一个空对象? API returns null,所以应该是空的。

我尝试将默认值添加到我的模型(collection 使用),但它们没有显示。所以我猜它是将 null 作为一个 object 的数据。我怎样才能阻止他这样做?

感谢

罗恩

好的,现在看来可以了。但我真的不明白为什么:)

我向我的模型添加了(空)defaults。现在可以了。

var MyModel = Backbone.Model.extend({
    defaults: {
    },

    initialize: function () {
        var self = this;
    }
});

如果您浏览 Backbone 的源代码,您会发现集合中的模型由 Collection.set

处理

一旦 Collection.set 解析了您的数据,它就会检查您实际 return 编辑的内容,如果值(null 在您的情况下)不是数组:

var singular = !_.isArray(models);
models = singular ? [models] : models.slice();

然后处理此模型列表并在您的集合中创建一个模型。

解决方案很简单:当您在 parse 中输入 null 值时,return 一个空数组:

var MyCollection = Backbone.Collection.extend({
    model: MyModel,
    url: '/v1/ajax/load-objects',

    parse: function(resp, xhr) {
        return resp.data.objects || [];
    }
});

还有模拟您问题的演示 http://jsfiddle.net/nikoshr/s2dve9ob/ and its solution : http://jsfiddle.net/nikoshr/s2dve9ob/1/