【问题标题】:Nice way to check if backbone fetch returns an empty model检查主干获取是否返回空模型的好方法
【发布时间】:2015-01-04 21:29:56
【问题描述】:

如果服务器上不存在数据,我正在使用 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');
            }
        });
    }

如您所见,我正在通过以下方式在客户端进行脏检查:

如果 (_.size(data.models["0"].attributes) == 0)

这很好...检查是否没有真正的模型回来,但我确信有更好的方法来检查模型是否为空,或者从服务器端发送其他内容:/?

只是看起来如此琐碎......我一定错过了什么......

谢谢,

肖恩。

【问题讨论】:

  • 为什么返回空对象?看起来你的后端应该只返回一个空数组,而不是一个空对象数组。
  • 好调用,改成数组并修复它...TX!!!
  • 太棒了。我已经添加了一个答案,所以我们可以关闭这个问题。

标签: node.js backbone.js express


【解决方案1】:

这是一个偏好问题,但最简单的解决方法是让您的服务器返回一个空数组而不是空对象数组。

【讨论】:

    【解决方案2】:

    Marionettejs 是一个固执己见的 Backbone 框架。在其中,他们定义了效用函数:

    isEmpty: function() {
      return !this.collection || this.collection.length === 0;
    },
    

    您只需将其添加到您的视图中。您可以在初始化时将其定义为this.isEmpty,或者扩展至您的视图中

    var MyView = Backbone.View.extend({ ... }); 
    _.extend( MyView, { isEmpty: function() { ... } });
    

    如果您从服务器返回一个空数组,您的集合的长度属性将为零,您的isEmpty 函数将返回true

    当然,你可以使用

    if (this.collection.length == 0) { ... }
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多