1

我有这个模型 -

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

我正在尝试这个-

_.pluck(resultsCollection,'id')

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

我犯了什么语法错误?

4

5 回答 5

4

Underscore 数组方法嵌入(可以这么说)到 Backbone 集合中。您可以直接在它们上调用它们:

resultsCollection.pluck 'id'

在大多数情况下,您还可以在集合的models属性(这是一个普通的旧数组)上使用 Underscore 方法,例如_.pluck someCollection.models, 'someAttr',但请注意这种情况pluck是特殊的,因为 Backbone 模型通常不会将它们的属性作为自己的属性(你必须打电话get才能访问它们)。尽管如此,Backbone 的实现pluck还是非常简单的:)

于 2012-09-13T08:35:55.807 回答
1

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

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

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

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

于 2012-09-13T14:32:54.387 回答
0

它应该是:

resultsCollection.pluck('id');

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

于 2012-09-13T08:34:03.713 回答
0

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

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

于 2012-09-13T08:36:18.260 回答
0

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

resultsCollection.pluck('id')这就是为什么调用wich 会为您完成所有工作会更好:

  • 转到模型属性
  • 转到每个模型的每个属性属性
  • 找到想要的id值并将其放入结果数组
于 2012-09-14T11:50:46.140 回答