我有一个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:
我把它缩小到时间问题。我在集合同步后运行此代码,但似乎集合中的模型解析会在稍后发生。
答案 0 :(得分:0)
您需要为.each()
指定一个迭代器。这样做:
@customers.each (@customers, c) ->
console.log c
如果您检查.each()
上的主干文档,您会发现它包含三个属性; (list, iterator, [context])
。由于您只是记录客户而不是客户集合的迭代器,因此只记录整个集合。
答案 1 :(得分:0)
骨干集合的模型存储在Collection.models
,这就是你需要迭代的东西。
什么时候做
_.each @customers
,您正在迭代集合对象的属性,而不是其模型
所以你想要的是
_.each @customers.models, (customer) -> console.log customer
答案 2 :(得分:0)
这在我的提取/同步代码中遇到了一些问题。这个代码不应该在客户集合完全同步之前运行,但是某些东西(尚未确定)允许它在集合完全同步之前运行。