2012-07-17 46 views
8

我有一個集合使用從外部API填充,API返回一些對象+分頁詳細信息的其他對象,然後我想顯示可能只有這些的一個子集在我的意見的對象,但允許進一步分頁查看過如何處理與Backbone.Marionette分頁

爲了說明我的情況好一點:

  1. 從服務器獲取20個結果,得到的拼版數據進行進一步的網頁
  2. 顯示10個結果+更多按鈕
  3. 點擊更多,顯示10個結果+更多的按鈕
  4. 點擊更多,獲取20個結果從服務器,顯示10個結果+更多按鈕 ...

這將是您的解決方案? 我發現Backbone.Paginator,但我不知道它是如何與木偶集成,或者如果已經存在Backbone.Marionette.Paginator內線:

回答

8

Backbone.Paginator提供了擴展和額外的方法和Backbone集合之上的特性,這意味着它們應該可以在任何類型的Backbone視圖中使用,包括Marionette。

那麼你不應該做任何特殊的事情來整合Marionette和Paginator。您將構建一個利用其他方法和功能的視圖,但是您將基於Marionette的視圖而不是標準Backbone視圖。在這種情況下,我會建議來自Marionette的集合視圖或合成視圖,分別渲染分頁集合中的每個項目。

4

這是我如何解決集成Marionette和backbone.paginator的問題。從某種意義上說,這是「直截了當的」,但作爲骨幹隊的新來者,它讓我煩惱了一段時間!我希望這對某人有用。

在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; 
     } 
    }); 
});