根据某些条件对Backbone集合视图进行分段

时间:2012-07-16 11:01:44

标签: backbone.js marionette

我对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项目进行模板化。

1 个答案:

答案 0 :(得分:2)

您可以使用CompositeView代替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'