我有这个型号 -
class pt.SearchResultModel extends Backbone.Model
defaults:
id:"",
image:"",
colour:""
我正在尝试这个 -
_.pluck(resultsCollection,'id')
但它一直未定义返回 - 不确定发生了什么。
我制作了什么语法错误?
答案 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')
会更好,为你做所有工作: