Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主干集合在API不返回数据时添加空对象_Api_Backbone.js_Backbone.js Collections - Fatal编程技术网

主干集合在API不返回数据时添加空对象

主干集合在API不返回数据时添加空对象,api,backbone.js,backbone.js-collections,Api,Backbone.js,Backbone.js Collections,我有以下问题:我的API返回null-没有可用的数据。(太好了!)。我的集合获取数据,但创建一个空对象 我的API结果(来自Firebug): {"data":{"objects":null}} var MyCollection = Backbone.Collection.extend({ model: MyModel, url: '/v1/ajax/load-objects', parse: function(resp, xhr) { return

我有以下问题:我的API返回null-没有可用的数据。(太好了!)。我的
集合
获取数据,但创建一个空对象

我的API结果(来自Firebug):

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

    parse: function(resp, xhr) {
        return resp.data.objects;
    }
});
我的收藏:

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

    parse: function(resp, xhr) {
        return resp.data.objects;
    }
});
当我在视图中打印
self.model.toJSON()
时(模型就是集合),我得到了这个(Firebug):

我的问题:为什么集合会在我的集合中放置一个空对象?API返回null,因此它应该为空

我尝试将默认值添加到我的模型中(集合使用),但没有显示它们。我猜它是把空值作为一个对象的数据。我怎样才能阻止他这样做

Thx


罗恩

好的,现在它似乎起作用了。但我真的不明白为什么:)

我在模型中添加了(空)
默认值
。现在它起作用了

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

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

如果您浏览一下主干网的源代码,就会发现集合中的模型是由

一旦
Collection.set
解析了您的数据,它将检查您实际返回的数据,并在值(
null
在您的情况下)不是数组时创建一个数组:

var singular = !_.isArray(models);
models = singular ? [models] : models.slice();
然后处理此模型列表并在集合中创建单个模型

解决方案很简单:在
parse
中点击
null
值时返回一个空数组:

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

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

还有一个模拟您的问题及其解决方案的演示:

对象
为空时,您是否尝试返回空数组(
[]
)?IIRC主干网希望从
parse
返回一个数组。我猜它会看到您返回一个单一对象(null),并假设您需要一个单元素长的数组