You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用_.each()操作Backbone集合模型?排查element未定义问题

Backbone集合遍历:为什么_.each直接用集合会拿到undefined?

我来帮你理清这个问题的来龙去脉,其实核心是Backbone集合不是普通数组,是封装过的对象,直接用Underscore的_.each迭代集合本身会踩坑。

为什么第一次尝试会拿到undefined?

当你执行_.each(this.someCollection, function(element) { ... })时,Underscore是在迭代Backbone集合对象的可枚举属性(比如length、_byId、models这些),而不是集合里的模型。这些属性里有些值可能就是undefined,所以你才会看到element始终是undefined。

为什么第二种方法能生效?

你用list.at(index)能拿到模型,是因为list就是集合对象本身,Backbone的at()方法本来就是通过索引从集合内部的models数组(真正存模型的地方)里取对应元素。这种写法确实能拿到模型,但属于绕了个远路,不是最优解。

正确的遍历方式有两种,推荐优先用第一种:

  1. 用Backbone集合自带的each方法(最推荐)
    Backbone已经给集合封装了each方法,内部帮你处理了迭代模型的逻辑,直接就能拿到每个模型:
this.someCollection.each(function(model) {
  console.log(model); // 这里的model就是集合里的每个模型对象
});
  1. 用Underscore遍历集合的models数组
    如果你非要用Underscore的_.each,可以直接迭代集合的models属性(这是集合存储所有模型的原生数组):
_.each(this.someCollection.models, function(model) {
  console.log(model);
});

这两种写法都比你第二种绕弯的方式更简洁,也更符合Backbone的设计习惯。

内容的提问来源于stack exchange,提问作者yangsunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:46:13