0

我对BackboneJSMarionette有点陌生,我对如何使用CollectionView实现一些棘手的行为有点困惑。假设我有一个约会列表,每个约会都有一个约会日期/时间(存储为 unix 时间戳,但这并不重要)。

当我显示这些时,我想按如下方式显示它们:

今天

  • 会议 A(上午 10:00)
  • 会议 B(上午 11:00)
  • 会议 C(下午 1:00)
  • ... 还有 4 个

未来 7 天

  • 会议 D(星期一下午 3 点)
  • 会议 E(星期二下午 2 点)
  • ... 还有 7 个

我正在考虑的方法是在接下来的 7 天(包括今天)从服务器中提取一个集合,然后对集合进行 2 次查看(今天一次,一周一次)。这就是我正在努力解决的问题:

  • AFAIK,Marionette.CollectionView 呈现集合中的所有元素。是否有一种简单的方法可以覆盖此行为以仅渲染 3 或 4 个项目?
  • 我该如何处理... 和更多行?它不是真正的模型,但它的数据是从底层集合中计算出来的。

如果它有所作为,我将使用@SlexAxton 的requirejs-handlebars项目进行模板化。

4

1 回答 1

2

您可以使用 aCompositeView而不是 a CollectionView。因此,您自己定义collection属性以使用您想要的子集,然后您可以显示“X more...”链接。

它可能是这样的:

EventView = Backbone.Marionette.ItemView.extend
  template: 'event'


EventsView = Backbone.Marionette.CompositeView.extend
  itemView: EventView
  template: 'events'

  initialize: (attributes)->
    @extractSubset(attributes.collection)

  extractSubset: (collection)->
    @collection  = new EventsCollection(collection.filterByWhatYouWant())
    @othersCount = collection.length - @collection.length

  appendHtml: (collectionView, itemView)->
    collectionView.$('.events').append(itemView.el)

  serializeData: ->
    othersCount:      @othersCount
    andAnyOtherThing: 'you need in the template'
于 2012-07-16T11:41:01.230 回答