我正在使用node.js/express,如果服务器上不存在数据,则返回一个空对象(即:express端的res.send({}))。
但是,由于我使用的是Backbone myCollection.fetch(....)我仍然得到一个模型,只是它是空的。
如:
_getLines: function () {
var self = this;
self.m_linesCollection.fetch({
success: function (data) {
$(Elements.FASTERQ_CUSTOMER_LINES).empty();
if (_.size(data.models["0"].attributes) == 0)
return;
},
error: function () {
log('error loading collection data');
}
});
}
如您所见,我正在通过以下方式对客户端进行脏检查:
if (_.size(data.models["0"].attributes) == 0)
哪个工作正常...检查是否没有真正的模型返回,但我相信有更好的方法来检查模型是否为空,或者从服务器端发送其他东西:/?
只是看起来如此微不足道...我一定错过了什么...
感谢
肖恩。
偏好问题,但解决此问题的最简单方法是让您的服务器返回一个空数组而不是空对象数组。
Marionettejs是一个固执己见的Backbone框架。在其中,他们定义了实用程序函数:
isEmpty: function() {
return !this.collection || this.collection.length === 0;
},
您只需将其添加到视图中即可。您可以在初始化中定义它,如this.isEmpty
,或通过扩展到视图中来定义它
var MyView = Backbone.View.extend({ ... });
_.extend( MyView, { isEmpty: function() { ... } });
如果从服务器返回一个空数组,则集合的 length 属性将等于零,并且isEmpty
函数将返回 true
。
当然,你可以只使用
if (this.collection.length == 0) { ... }