【问题标题】:_.pluck of Backbone collection not working_.pluck 骨干集合不起作用
【发布时间】:2012-09-14 19:50:46
【问题描述】:

我有这个模型-

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

我正在尝试这个 -

_.pluck(resultsCollection,'id')

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

我犯了什么语法错误?

【问题讨论】:

    标签: javascript backbone.js coffeescript


    【解决方案1】:

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

    resultsCollection.pluck 'id'
    

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        应该是:

        resultsCollection.pluck('id');
        

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

        【讨论】:

          【解决方案4】:

          Backbone.Collection 自动提供了大部分underscore.js 函数。所以你可以写resultsCollection.pluck('id'),这样会好一点。

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

          【讨论】:

            【解决方案5】:

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

            这就是为什么打电话给resultsCollection.pluck('id') 会更好的原因,它将为您完成所有工作:

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

            【讨论】:

              猜你喜欢
              • 2014-03-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多