我们说我有一个模型,它有一系列与之相关的项目。
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 %>
您已将myModel1
和myModel2
作为页面元素。
但我希望1
和2
(在此示例中)作为页面元素呈现。也许使用如下模板:
<% obj.item %>
答案 0 :(得分:0)
这将为您提供该系列模型中的一系列独特项目:
_.uniq(_.union(myColl.pluck("items")))
你应该能够弄清楚如何使用这个电话来获得你想要的东西。