2011-09-05 16 views
5

Tengo un escenario de detalles maestros clásico que estoy implementando en backbone.js.Backbone.js Escenario de detalles maestros

Por el momento no me preocupa la parte de navegación e historia de backbone.js así que me lo estoy saltando.

  • Tengo un GridView donde se obtienen y se muestran todos los modelos de un servicio de descanso.
  • Tengo un DetailView (ventana modal) donde se muestra un modelo particular seleccionado de una cuadrícula con más campos que aparecen en la vista de cuadrícula maestra.

me han puesto en marcha:

  • una aplicación principal, donde se unen todos los puntos de vista de backbone y routers.
  • la aplicación se inicia en el documento cargado
  • un router principal columna vertebral (que actúa más como un "controlador" clásica) con responsabilidades para:
    • crear y vistas destruyendo
    • ir a buscar y la publicación de los datos
    • fallecimiento los datos de puntos de vista
    • coordinación vistas eventos

Ahora los datos devueltos del servicio de descanso para gridView (colección Backbone) son solo algunos datos parciales de los modelos.

Para mostrar todos los detalles de un modelo en particular, tengo que volver a obtener los detalles del servicio de descanso.

La obtención del modelo termina con un modelo desconectado de la colección y las actualizaciones no se reflejan en la colección en sí y tengo que actualizar nuevamente la vista maestra recuperando todos los datos.

La destrucción y recreación de la vista de detalles a veces hace que pierda los eventos de visualización.

¿Cuál sería la implementación correcta de este escenario? No entiendo completamente la mejor manera de hacer las cosas en la red troncal.

Respuesta

7

En primer lugar, le sugiero que devuelva los detalles completos de los modelos en su consulta de colección "gridView". Esto resuelve el problema de la 'colección desconectada'.

Aunque no tiene que hacer la carga de la colección completa, digamos que hacer una carga completa de toda la colección no va a funcionar, los detalles son demasiado grandes, por ejemplo, debería poder pasar el mismo modelo de la colección en su vista detallada, pruebe para ver si es una carga parcial o una carga completa, y emita un "fetch()" para el modelo, devolviendo la información completa, ya que este es el mismo modelo que en el colección, debe ser actualizado. ¿Tiene sentido?

Además, para las vistas detalladas, sugiero, especialmente si solo está diseñado llamadas para una vista detallada activa, reutilizar la vista y escribir una función en la vista que le permite cambiar el modelo.

Así, en resumen:

  • al iniciar la aplicación, cargue una GridView y uno DetailView.
  • refactorice su detailView para permitir que los modelos se establezcan en él. (DetailView.setModel (..)
  • cuando el usuario desea ver los detalles de un modelo, pasar ese modelo en el DetailView usando la función anterior.
  • si el modelo no se ha cargado completamente, el método puede setModel ir y buscar() el resto de los datos. Puede probar una propiedad específica que solo estará allí a plena carga o establecer una propiedad en el modelo para indicar si se ha cargado por completo.
  • Si se encuentra Perder eventos, intente llamar a delegateEvents() al final de su función render(). Vuelva a enlazar los eventos.
  • Dado que el mismo modelo se usa tanto en la colección gridView como en detailView, asumiendo que está respondiendo a los eventos de cambio correctamente, víspera Todo debe estar sincronizado.
Cuestiones relacionadas