2012-02-12 10 views
24

He tomado la decisión de cambiar el enrutamiento de mi aplicación al lado del cliente en lugar de al lado del servidor. Esto significa que necesitaré una forma de cambiar de vista dentro y fuera de la página a medida que el usuario navega por el sitio. Lo único que pude encontrar que intenta documentar esto es este artículo: How to switch views using Backbone.jsCambio de vistas en la red troncal para navegar entre páginas: ¿cuál es la manera correcta?

Veo cómo funcionaría esto, pero no creo que sea una buena forma de hacerlo. Quiero mantener mis puntos de vista, ya que ese es todo el punto, ¿verdad? ¿Tener vistas separadas para las partes distinguibles de su aplicación? Creo que tener un gran "ContentView" y luego simplemente incorporar cosas y rehacer es un poco crudo y evita toda la genial modularización que puede hacer de otra manera.

Entonces, ¿cuál es la mejor manera de hacerlo? Idealmente, quiero una función similar a la documentada en el artículo mencionado anteriormente, pero toma como punto de vista una vista de red troncal.

Respuesta

37

He escrito algunos artículos sobre este tema:

http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

y uno nuevo que toma la idea de este post y formaliza más:

http://lostechies.com/derickbailey/2011/12/12/composite-js-apps-regions-and-region-managers/

re -utilizar vistas es en realidad un antipatrón en la mayoría de los casos. Por lo general, hay un montón de código adicional y más crumble involucrado en la celebración para ver las instancias, para que se vuelvan a unir al DOM y manejen correctamente los eventos DOM registrados. Además, corre el riesgo de fugas de memoria (de lo que habla mi primer artículo) y destruye el rendimiento de la aplicación al utilizar demasiada memoria.

Si sus vistas utilizan un recurso "costoso", debe almacenar en caché ese recurso fuera de sus vistas y volver a utilizarlo. Sus opiniones deben ser baratas y rápidas para crear, renderizar, mostrar y destruir.

+1

En primer lugar, gran lectura, su blog ha ido directamente a mi fuente RSS. Estoy considerando mudarme a Marionette ahora. ¿Cuál es su opinión sobre requerir libs como requireJS y su uso con esto? Supongo que la utilidad vence tan pronto como se implementa el enrutamiento del lado del cliente ... –

+1

requirejs es totalmente compatible con marionetas, y muchos de mis clientes lo usan con marionetas. No lo uso personalmente en mis propios proyectos, pero es solo una preferencia personal. definitivamente resuelve algunos problemas reales, y es una herramienta importante en la comunidad JS en este momento. la verdadera prueba será si necesita mantenerse después de que JS obtiene un sistema de módulos real en los navegadores. –

+0

No olvide agregar 'this.delegateEvents()' dentro del método View # render(), de lo contrario algo como 'events: {" clickbutton ":" doStuff "}' no se activará después de que se visualice la vista -entregado – James

Cuestiones relacionadas