Допустим, у меня есть модель, и с ней связан массив элементов.
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
Каков наилучший способ построить CompositeView из массива items
после выполнения выборки без каких-либо проблем? Миксин, наверное?
Получите коллекцию, добавьте ее в представление:
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 %>