0

モデルがあり、それに関連付けられたアイテムの配列があるとしましょう。

class window.MyModel extends Backbone.Model

  urlRoot: () ->
    '/model/' + @attributes.name

  defaults:
    name: null
    items: []

  initialize: () ->
    @name = @attributes.name
    @items = @attributes.items

  parse: (resp) ->
    # Example build resp
    @items.push '1'
    @items.push '2'

    @attributes.items = @items

    @

そして、すべてのモデルを保持するコレクション。コレクションをフェッチすると、モデル名のリストが返されるだけで、詳細は何も返されません (したがって、内部フェッチ)。

class window.MyCollection extends Backbone.Collection

  url: '/collection'
  model: window.MyModel

  fetch: (options) ->
    # IE cache
    Backbone.Collection.prototype.fetch.call @, options

  parse: (resp) ->

    myModels = []

    # Example build resp
    myModel1 = new window.MyModel(name: 'myModel1')
    myModel1.fetch()

    myModel2 = new window.MyModel(name: 'myModel2')
    myModel2.fetch()

    myModels.push myModel1
    myModels.push myModel2

    myModels

itemsフェッチが行われた後に不安定になることなく配列から CompositeView を構築する最良の方法は何ですか? おそらくミックスイン?

コレクションを取得し、ビューに追加します。

myColl = new MyCollection()
myColl.fetch()

# which looks like: [{"name":"myModel1",items:["1","2"]},{"name":"myModel2",items:["1","2"]}]

someLayout.region.show new MyCollectionOfItemsViewThatIsAMarionetteCompositeView(
  collection: myColl # But really, I just want a collection of all the items (unique) that are in the models
)

基本的に、CompositeView が通常、次のようなテンプレートでレンダリングされる場合:

<% obj.name %>

ページ要素としてandがmyModel1あります。myModel2

しかし、 (この例では) and をページ要素としてレンダリングしたい1と考えています。2多分以下のようなテンプレートで:

<% obj.item %>
4

1 に答える 1

0

これにより、コレクションのモデルから一意のアイテムの配列が得られます。

_.uniq(_.union(myColl.pluck("items")))

その呼び出しを使用して必要なものを取得する方法を理解できるはずです。

于 2012-10-05T21:11:54.673 に答える