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/
我有以下问题:我的 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/