12

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

これが私が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つの未定義を見ました。これは正しいです?もしそうなら、バックボーン コレクションを通過するために for ループを使用できないのはなぜですか? また、そうする方法はありますか?

4

3 に答える 3

20

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

ただし、バックボーン コレクションにはさまざまな Underscore メソッドが混在しています。

アンダースコアの方法 (28)

Backbone.Collection で 28 の反復関数を提供するために、 Backboneは Underscore.js にプロキシします。すべてがここに記載されているわけではありませんが、完全な詳細についてはアンダースコアのドキュメントを参照してください…</p>

  • forEach (それぞれ)
  • ...

したがって、プロパティへのアクセスを避けたい場合は、mapまたはを使用できます。pluckmodels

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

このpluckメソッドは、多かれ少なかれ特殊なケースですmapが、コレクションは、単純なオブジェクト プロパティではなくモデル属性を取得できるように、アンダースコア バージョンを使用するのではなく、ネイティブ バージョンを実装します。

于 2012-07-30T18:26:59.813 に答える
5

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

于 2012-07-30T18:11:51.883 に答える
4
for object in object.models

これにより、コレクション内のモデルが得られます

于 2012-07-31T03:43:00.617 に答える