如何处理Backbone.Marionette的分页

时间:2012-07-17 08:51:19

标签: backbone.js marionette

我有一个使用外部API填充的集合,API返回了许多对象+其他对象的分页详细信息,然后我想在我的视图中只显示这些对象的子集,但允许进一步分页视图

更好地解释我的情况:

  1. 从服务器获取20个结果,获取更多页面的分页数据
  2. 显示10个结果+更多按钮
  3. 点击更多,显示10个结果+更多按钮
  4. 点击更多,从服务器获取20个结果,显示10个结果+更多按钮 ...
  5. 你的解决方案是什么? 我找到Backbone.Paginator,但我不知道它与Marionette的集成程度如何,或者是否已经存在 Backbone.Marionette.Paginator 扩展名:)

2 个答案:

答案 0 :(得分:8)

Backbone.Paginator在Backbone集合之上提供扩展和其他方法和功能,这意味着它们应该可以从任何类型的Backbone视图中使用,包括Marionette。

那么你不应该做任何特别的事情来整合Marionette和Paginator。您将构建一个利用其他方法和功能的视图,但您可以将该视图基于Marionette的视图而不是标准的Backbone视图。在这种情况下,我建议使用Marionette的集合视图或复合视图,分别从分页集合中呈现每个项目。

答案 1 :(得分:4)

以下是我如何解决整合Marionette和backbone.paginator的问题。从某种意义上来说它是“直截了当”的,但是作为backbone.marionette的新成员,它让我烦恼了一段时间!我希望这对某人有用。

使用compositeView上的serializeData方法从paginator的paginator_ui对象中呈现信息。

/* a view for presenting a backbone.paginator collection,
 * and for presenting and handling its pagination UI element */
App.module('Views', function(Views, App, Backbone, Marionette, $, _) {
    Views.PaginatedCollectionView = Backbone.Marionette.CompositeView.extend({
        template: 'backbone/templates/paginated_collection_view',
        itemView: App.Views.StructureView,

        /* I'm not using a model, but you could if you
         * wanted? You might even merge the two */
        serializeData: function(){
          if (this.model){
            data = this.model.toJSON();
          } else {
            // we want to render the paginator_ui in our templates
            data = this.collection.paginator_ui;
          }

          return data;
        }
    });
});