私はこのモデルを持っています -
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
get
pluck
他の人が述べたように、アンダースコアのpluckメソッドに委譲するコレクションのpluckメソッドを直接使用できます。
ただし、たとえばコレクションをフィルタリングすると、モデルの単純な配列になり、コレクションの pluck
メソッドがないことに気付きました。この場合、できることは、最初にattributes
属性を摘み取ってからid
、たとえば次のようなものを摘み取ることです
_.pluck(_.pluck(myCollection, 'attributes'), 'id');
もちろん、新しいコレクションを作成してこれらのモデルを渡し、コレクションpluck
メソッドにアクセスすることもできます。
そのはず:
resultsCollection.pluck('id');
バックボーン コレクションのアンダースコア メソッドは、元の形式ではなく、このように使用されます。_.method()
Backbone.Collection
機能の良い部分を自動的に提供しunderscore.js
ます。と書くことができますがresultsCollection.pluck('id')
、これは少し優れています。
さて、あなたの質問について:pluck
内部で「get」を使用して属性を取得します。id
これに加えて、結果は、モデルが属性として定義されていないことを意味します。
を呼び出すときは_.pluck(resultsCollection,'id')
、コレクション オブジェクトで pluck メソッドを呼び出します。このコレクションにはモデル属性がありますが、id属性はありません。
resultsCollection.pluck('id')
そのため、あなたのためにすべての作業を行う wichを呼び出す方がはるかに優れています: