Рендеринг массивов, прикрепленных к моделям внутри коллекции - миксин?

Допустим, у меня есть модель, и с ней связан массив элементов.

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

person Community    schedule 15.08.2012    source источник


Ответы (1)


Это даст вам множество уникальных предметов из моделей коллекции:

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

Вы должны быть в состоянии выяснить, как использовать этот призыв, чтобы получить то, что вы хотите.

person Axle    schedule 05.10.2012