2012-07-17 10 views
8

Tengo una colección que se completa con una API externa, la API devuelve una cantidad de objetos + detalles de búsqueda para otros objetos, entonces me gustaría mostrar probablemente solo un subconjunto de estos objetos en mis puntos de vista, pero permiten volver a la vista paginada demasiadocómo manejar la paginación con Backbone.Marionette

para explicar mi situación un poco mejor:

  1. fetch 20 resultados del servidor, obtener datos de paginación para más páginas
  2. Mostrar 10 resultados + más botón
  3. haciendo clic más, muestra resultados 10 + botón Más
  4. clic más, obtiene 20 resultados desde el servidor, muestra resultados 10 + botón Más ...

lo que sería su solución? que he encontrado Backbone.Paginator, pero no sé qué tan bien se integra con marionetas, o si ya existe un Backbone.Marionette.Paginator extensión :)

Respuesta

8

Backbone.Paginator ofrece extensiones y métodos adicionales y características en la parte superior de las colecciones de Backbone, lo que significa que deben poder utilizarse desde cualquier tipo de vista Backbone, incluida Marionette.

No debería tener que hacer nada especial para integrar Marionette y Paginator, entonces. Construiría una vista que aproveche las ventajas de los métodos y funciones adicionales, pero basaría esa vista en las vistas de Marionette en lugar de las vistas estándar de Backbone. En este caso, recomendaría una vista de colección o una vista compuesta de Marionette, representando cada elemento de la colección paginada de forma individual.

4

Así es como resolví el problema de integrar Marionette y backbone.paginator. Fue "sencillo" en cierto sentido, pero como un recién llegado a la columna vertebral. ¡Marionette me fastidió por un tiempo! Espero que esto sea útil para alguien.

Utilice el método serializeData en compositeView para representar información del objeto paginator_ui del paginador.

/* 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; 
     } 
    }); 
}); 
Cuestiones relacionadas