繁体   English   中英

_.pluck的骨干网集合不起作用

_.pluck of Backbone collection not working

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有这个模特-

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

我正在尝试-

_.pluck(resultsCollection,'id')

但是它总是返回未定义的-不确定发生了什么。

我犯了什么语法错误?

5 个回复

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

resultsCollection.pluck 'id'

在大多数情况下,你也可以使用下划线方法在集合的models属性(这是一个普通的老阵列),如_.pluck someCollection.models, 'someAttr' ,但要注意的情况下, pluck是特殊的,因为骨干模型通常不会将其属性作为自己的属性(您必须调用get来访问它们)。 骨干的实施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(resultsCollection,'id')方法。 该集合具有models属性,但没有id属性。

这就是为什么最好调用resultsCollection.pluck('id')来为您完成所有工作的原因:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM