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 的最佳方法是什么?也许是一个mixin?

获取集合,将其添加到视图中:

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 %>

您将拥有myModel1myModel2作为页面元素。

但我希望12(在本例中)被呈现为页面元素。也许使用如下模板:

<% obj.item %>
4

1 回答 1

0

这将为您提供集合模型中的一系列独特项目:

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

您应该能够弄清楚如何使用该调用来获得您想要的东西。

于 2012-10-05T21:11:54.673 回答