_.pluck of Backbone collection无法正常工作

时间:2012-09-13 08:19:48

标签: javascript backbone.js coffeescript

我有这个型号 -

class pt.SearchResultModel extends Backbone.Model
  defaults:
    id:"",
    image:"",
    colour:""

我正在尝试这个 -

_.pluck(resultsCollection,'id')

但它一直未定义返回 - 不确定发生了什么。

我制作了什么语法错误?

5 个答案:

答案 0 :(得分:4)

Underscore数组方法嵌入(可以这么说)Backbone集合中。你可以直接打电话给他们:

resultsCollection.pluck 'id'

在大多数情况下,您还可以在集合的models属性(这是一个普通的数组)上使用Underscore方法,例如_.pluck someCollection.models, 'someAttr',但请注意{{1}的情况因为Backbone模型通常不会将其属性作为自己的属性(您必须调用get来访问它们),这是特殊的。 Backbone的pluck的实现仍然是very straightforward:)

答案 1 :(得分:1)

正如其他人提到的,您可以直接使用集合的pluck方法,该方法委托下划线的pluck方法。

但是我注意到,例如,如果您filter您的收藏集,您最终会得到一个简单的模型数组,因此没有集合的 pluck方法。在这种情况下,你可以做的是首先选择attributes属性,然后选择id例如这样的东西应该起作用

_.pluck(_.pluck(myCollection, 'attributes'), 'id');

当然,您也可以创建一个新集合并传入这些模型,然后可以访问集合pluck方法。

答案 2 :(得分:0)

应该是:

resultsCollection.pluck('id');

Backbone集合上的下划线方法以这种方式使用,而不是以原始形式使用_.method()

答案 3 :(得分:0)

Backbone.Collection会自动提供underscore.js个功能的很大一部分。所以你可以写resultsCollection.pluck('id'),这好一点。

现在,关于您的问题:pluck在内部使用'get'来检索您的属性。这加上您的结果意味着您的模型没有将id定义为属性。

答案 4 :(得分:0)

当您调用_.pluck(resultsCollection,'id')时,可以在集合对象上调用pluck方法。 此集合具有模型属性,但没有 id 属性。

这就是为什么打电话给resultsCollection.pluck('id')会更好,为你做所有工作:

  • 转到模型属性
  • 转到每个模型的属性属性
  • 找到想要的 id 值并将其放入结果数组