2012-02-22 7 views
7

Nuevo para usar Backbone y tiene una aplicación muy simple. Básicamente hay Clients y ClientItems. Tengo una vista para mostrar todos los clientes y si hace clic en un cliente, se lo lleva a sus artículos de cliente. Ir a esta vista de ClientItems solo debería ocultar la vista de Clientes y volver a Clientes debería ocultar los Artículos de Cliente. Ahora, en mi función render() para cada vista, está yendo a través de las colecciones y agregando cosas dinámicamente a la página. Cuando voy y vengo entre los dos (usando el botón de retroceso) no necesito volver a procesar porque todos los datos están en la página, simplemente ocultos. ¿A dónde debería ir esta lógica? En este momento lo tengo en la función render(), pero se siente descuidado, ¿cuál es la forma preferida de manejar esto?Backbone mostrando u ocultando vistas renderizadas mejores prácticas

Respuesta

11

Estamos utilizando una variable global App con varios función común utilizada en toda aplicación:

var App = { 
    initialize : function() { 

     App.views = { 
      clientView : new ClientsView(), 
      clientItemView : new ClientsItemsView() 
     } 
    }, 

    showView: function(view){ 
     if(App.views.current != undefined){ 
      $(App.views.current.el).hide(); 
     } 
     App.views.current = view; 
     $(App.views.current.el).show(); 
    }, 

    ... 
} 

Y luego utilizamos esta App de otras partes de aplicación:

App.showView(App.views.clientView); 
+0

Se ve bien. Veo que creas las Vistas desde el principio en 'initialize'. ¿Es esto algo común de hacer? ¿Harías lo mismo con las colecciones? Tiene sentido para mí ahora, ya que solo necesitaré una sola instancia de cualquiera, pero todavía estoy aprendiendo. – Brandon

+1

solo estamos creando las vistas de inmediato, todas las demás cosas se crean cuando es necesario. Por supuesto, puede agregar require.js e init view cuando lo necesite. –

+0

Estamos usando App.views.current.show() para que se pueda realizar cualquier lógica adicional con respecto a mostrar (puede haber otros detectores de eventos que cambien) –

5

solución de IntoTheVoid es bueno - es bueno tener un solo lugar para ocultar/mostrar vistas. ¿Pero cómo activas la lógica?

En mi experiencia, los enrutadores son el mejor lugar para esto. Cuando una ruta cambia y se llama a la función apropiada, debe actualizar la vista activa y visible.

¿Qué sucede si necesita varias vistas para ser visibles a la vez? Si tiene una vista principal que siempre cambia cuando cambia la ruta y varias vistas secundarias adhesivas, no necesita preocuparse. Pero si es más complejo que eso, piense en crear un ComboView que empaquete ordenadamente todas las vistas relevantes en una que contenga el nodo el. De esa manera, la lógica anterior aún funciona, y las funciones de su enrutador no están llenas de lógica para administrar qué vistas son visibles en este momento.