Soy nuevo en Backbone.js, y estoy tratando de averiguar donde las variables de estado deberían vivir. Mi caso de uso:Backbone.js: ¿dónde almacenar información del estado?
Tengo una aplicación que proporciona una interfaz de lectura para un libro (lo sé, ejemplo clásico, ¿no?). Mis modelos son Book
y Page
con clases de colección para cada uno. La estructura de la aplicación se ve más o menos así (valga la visio ASCII):
+------------+
| Controller |
+------------+
| Views Models
| +--------------+ +----------------+
|-| IndexView |------| BookCollection |
| +--------------+ +----------------+
| |
| +--------------+ +----------------+
+-| BookView |------| Book |
+--------------+ +----------------+
| |
| +--------------+ |
|-| TitleView |-+ |
| +--------------+ | +----------------+
| +-| Page |
| +--------------+ | +----------------+
+-| PageView |-+
+--------------+
Es decir, los Controller
crea instancias y coordina dos puntos de vista, y IndexView
BookView
, respaldados por los modelos. El BookView
crea una instancia y coordina un conjunto de subvistas (de hecho, hay más de lo que se muestra aquí).
La información de estado incluye:
- el libro actual (puntero o id)
- la página actual (puntero o id)
- otras variables de estado de interfaz de usuario, como por ejemplo si las imágenes en la página son visibles o no, si otros widgets están abiertos o cerrados, etc.
Mi pregunta es, ¿dónde debería estar esta información de estado? Las posibles opciones incluyen:
Los modelos , lo que podría tener en cuenta el estado. Esto tiene sentido, ya que están destinados a almacenar datos y las vistas pueden escuchar cambios de estado, pero no parece que esto se ajuste al patrón de Backbone.js deseado, y no siempre tendría sentido (por ejemplo, activar la imagen en la
PageView
debe aplicarse a todas las páginas, no sólo el actual)Un modelo Singleton especial destinado a recibir información de estado. Nuevamente, tiene sentido, es fácil de escuchar, todos los puntos de vista podrían vincularse a él, pero de nuevo, esto parece fuera del estándar MVC.
Los vistas, que son responsables del estado de interfaz de usuario - pero esto requeriría vistas a tener en cuenta entre sí para obtener información de estado, que parece incorrecta
El controlador , que debería ruta la aplicación entre estados: esto tiene sentido, pero implica un viaje de ida y vuelta algo extraño, por ejemplo
User selects "Show Images" --> View event listener is called --> View informs Controller --> Controller updates state --> Controller updates View
(en lugar de la simpleUser selects "Show Images" --> View event listener is called --> View updates
)
supongo que de alguna manera esto es una cuestión genérica MVC, pero estoy teniendo problemas para conseguir mi cabeza alrededor de ella. ¿Qué parte de la aplicación debería ser responsable de guardar el estado actual?
ACTUALIZACIÓN: Para referencia futura, utilicé un modelo de estado singleton global para este problema.El flujo de interfaz de usuario es la siguiente:
- manipuladores Ver IU no hacen más que actualizar
app.State
- Mis routers también hacer nada más que actualizar
app.State
- son vistas que muestran esencialmente especializados y reaccionan a los cambios de dirección URL - Vistas escuchar los cambios en
app.State
y actualizar en consecuencia
Mi aplicación es de código abierto - se puede ver el code on Github. La pieza relevante aquí es State model, que he extendido para tratar con (de) estado de serialización para la URL.
No hay 'Controlador 'en la red troncal 0.5 – Raynos
Bueno, sí, tengo una clase de Enrutador que estoy llamando' Controlador'. Todavía está básicamente destinado a realizar la función de un controlador, ¿verdad? – nrabinowitz
no realmente. En términos de MVC clásico, debes ver el 'View' como un' Controller' clásico. Lo mejor es no intentar pensar en el MVC clásico cuando se hace backbone. En términos de su pregunta, el libro actual va a 'AppView', la página actual va al' Book', el resto entra en 'AppView'. 'AppView' es una ** vista singleton especial ** si va a – Raynos