渲染数组附加到Collection内的模型 - mixin?

时间:2012-08-15 22:29:58

标签: javascript backbone.js underscore.js marionette

我们说我有一个模型,它有一系列与之相关的项目。

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

在获取fnot之后从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 %>

您已将myModel1myModel2作为页面元素。

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

<% obj.item %>

1 个答案:

答案 0 :(得分:0)

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

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

你应该能够弄清楚如何使用这个电话来获得你想要的东西。