12

バックボーンにはかなり新しいので、これは本当に基本的な質問です。私はBackboneコレクションを関数に渡しました。そして、それが渡され、コレクションのモデルにIDがあることを証明できます。For Loop Over Backbone Collection

は、ここで私はIDを設定しています方法です -

convertToMapObjects: (results) => 
    objectList = new ObjectList() 
    results.each(result)-> 
    testObj = new TestObject() 
    testObj.set 
     id = result.get("id") 
    objectList.add(testObj) 

そして(モデルはイベントをトリガすることを介してアクセスする)別の関数に -

getIds: (objects) => 
ids = (object.id for object in objects) 

私はこの問題が原因であってもよいと思います私がやったときにコレクションを繰り返す方法

for object in objects 
    console.log(object) 

私は2つのundefi neds。これは正しいです?もしそうなら、forループを使ってバックボーンコレクションを行うことができないのはなぜですか?また、私はそうすることができる方法はありますか?

答えて

20

バックボーンコレクションが配列でないため、for ... inは期待している結果を得られません。単純なループを使用する場合は、コレクションのmodelsプロパティを調べる必要があります。

しかし、バックボーンコレクションはvarious Underscore methods mixed inを持っている:Underscore.jsへ

アンダーメソッド(28)

バックボーンプロキシをBackbone.Collectionに28の反復機能を提供します。 ...

  • のforEach(各)
  • ...

そうすることができますが、それらはすべてここに文書化されていませんが、あなたは完全な詳細については、アンダースコアのドキュメントを見てみることができます

ids = objects.map (m) -> m.id 
ids = objects.pluck 'id' 

:あなたはmodels propertyアクセスしないようしたい場合mapまたはpluckを使用メソッドは多かれ少なかれ特別なケースのmapですが、コレクションは単純なオブジェクトプロパティではなくモデル属性を引き出すことができるように、アンダースコアバージョンを使用するのではなくネイティブバージョンを実装しています。

+0

コレクションにあなたのモデルを与えるだろう - ありがとう – praks5432

5

コレクションオブジェクト自体ではなく、コレクションのmodels propertyをループします。

4
for object in object.models 

これは、これは正確に私の質問に答え