0

我有一个Backbone.PageableCollection ( @customers),我想遍历它的模型。我尝试了很多事情——包括我认为显而易见的事情:

@customers.each (customer) ->
  console.log customer

不幸的是,这会注销一些看起来像集合但其中没有模型数据的东西。我知道该集合已完全同步,因为当我注销时,@customers.models我可以看到一组模型数据:

在此处输入图像描述

奇怪的是,如果我这样做:

_.each @customers.models, (customer) ->
  console.log customer

我得到与上述相同的无用结果。

我错过了什么?

更新:

仔细观察console.log customer两种方法中记录的对象,这看起来像是一个具有未填充属性的模型。这很奇怪,因为日志记录@customers.models显示了一系列具有完全填充属性的模型。此外,each循环只执行一次。

更新 2:

我按照以下 agconti 的建议尝试了以下操作:

@customers.each (@customers, c) ->
  console.log @customers, c

编译为:

      return this.customers.each((function(_this) {
        return function(customers, c) {
          _this.customers = customers;
          return console.log(_this.customer, c);
        };
      })(this));

和日志undefined和一个0.

更新 3:

如果我设置:

window.customers = @customers

然后在控制台中输入:

_.each(customers.models, function (customer) { return console.log(customer)});

我得到了所有客户模型的日志。我现在真的很迷茫...

更新 4:

我已将其缩小到时间问题。我在集合同步后运行此代码,但似乎集合中的模型解析稍后发生。

4

3 回答 3

0

事实证明,这在我的获取/同步代码中存在一些问题。在客户集合完全同步之前,此代码不应该运行,但某些东西(尚未确定)允许它在集合完全同步之前运行。

于 2014-02-12T21:30:23.950 回答
0

您需要为.each(). 改为这样做:

@customers.each (@customers, c) ->
  console.log c

如果您检查主干文档,.each()您会发现它包含三个属性;(list, iterator, [context]). 由于您只是记录客户而不是客户集合的迭代器,因此它只记录整个集合。

于 2014-02-12T03:45:01.253 回答
0

主干集合的模型存储在Collection.models,这就是您需要迭代的内容。这样做时 _.each @customers,您正在迭代集合对象的属性,而不是它的模型,所以您想要的是 _.each @customers.models, (customer) -> console.log customer

于 2014-02-12T16:14:28.617 回答