我有这个模型 -
class pt.SearchResultModel extends Backbone.Model
defaults:
id:"",
image:"",
colour:""
我正在尝试这个-
_.pluck(resultsCollection,'id')
但它一直返回未定义 - 不确定发生了什么。
我犯了什么语法错误?
我有这个模型 -
class pt.SearchResultModel extends Backbone.Model
defaults:
id:"",
image:"",
colour:""
我正在尝试这个-
_.pluck(resultsCollection,'id')
但它一直返回未定义 - 不确定发生了什么。
我犯了什么语法错误?
Underscore 数组方法嵌入(可以这么说)到 Backbone 集合中。您可以直接在它们上调用它们:
resultsCollection.pluck 'id'
在大多数情况下,您还可以在集合的models
属性(这是一个普通的旧数组)上使用 Underscore 方法,例如_.pluck someCollection.models, 'someAttr'
,但请注意这种情况pluck
是特殊的,因为 Backbone 模型通常不会将它们的属性作为自己的属性(你必须打电话get
才能访问它们)。尽管如此,Backbone 的实现pluck
还是非常简单的:)
正如其他人提到的,您可以直接使用集合的pluck方法,该方法代表下划线的pluck方法。
但是我注意到,例如,如果你过滤你的集合,你最终会得到一个简单的模型数组,因此没有集合的 pluck
方法。在这种情况下,你可以做的是首先采摘attributes
属性,然后采摘id
例如这样的东西应该可以工作
_.pluck(_.pluck(myCollection, 'attributes'), 'id');
当然,您也可以只创建一个新集合并传入这些模型,然后访问该集合pluck
方法。
它应该是:
resultsCollection.pluck('id');
以这种方式使用 Backbone 集合上的下划线方法,而不是以其原始形式使用_.method()
Backbone.Collection
自动提供了很好的部分underscore.js
功能。所以你可以写resultsCollection.pluck('id')
,这样会好一些。
现在,关于您的问题:pluck
在内部使用“get”来检索您的属性。这加上您的结果意味着您的模型没有id
定义为属性。
当你调用_.pluck(resultsCollection,'id')
时,你调用集合对象的 pluck 方法。此集合具有模型属性,但没有id属性。
resultsCollection.pluck('id')
这就是为什么调用wich 会为您完成所有工作会更好: