【问题标题】:Fragmenting Backbone collection view based on some criteria根据某些标准对 Backbone 集合视图进行分段
【发布时间】:2012-07-16 19:41:01
【问题描述】:

我对@9​​87654321@ 和Marionette 有点陌生,我对如何使用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 项目进行模板化。

【问题讨论】:

  • 也许这将完全适合模板内的逻辑 :) 你必须做某些事情,即使它也不正确。我使用 treenode 作为 modelsingle template 构建了一个 treeview,其中包含逻辑

标签: backbone.js marionette


【解决方案1】:

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

【讨论】:

  • 哦,太棒了。我会试一试,让你知道。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多