2012-04-21 18 views
16

Actualmente estoy compilando una enorme aplicación troncal (clon de Facebook).Backbone.js Gran aplicación de páginas mutli, gestión de transiciones de página limpia destrucción, creación, etc.

Durante el último par de días, siento bastante contento con cómo funciona todo en BB gracias al tutorial excelente de Rob Connery (visualización esencial si su comenzando con MVC 3 y BB http://tekpub.com/productions/mvc3)

Ahora me he dado el escenario donde necesito cambiar de página en mi aplicación, y estoy comenzando a conectar esto, pero siento que estoy haciendo mucho de esto yo mismo. Esto está bien, y sé que podré hacer lo que quiero.

He tras con los problemas de fugas de memoria, asegurándose de que Unbind y retirar mis modelos/colecciones/vistas al cambiar de página, Switching views in backbone for navigating between pages - whats the right way?

Pero aparte de esto, hay toda una carga de tareas que Quiero hacer cuando cambio de página. Esencialmente eliminando y agregando partes de la página. Esto es un poco más complicado porque en lugar de simplemente eliminar todo, me gustaría eliminar/eliminar solo los bits de la página que necesitan cambiar, en función de la transición que quisiera realizar.

Como he dicho, estoy trabajando por mi cuenta en este momento, pero me preguntaba si había un patrón para manejar este proceso de desgarro/destrucción, y mantener las cosas limpias (y no terminar con un enrutador masivamente hinchado (controlador hinchado !!!)

+1

¿Es esta la mejor respuesta? https://github.com/derickbailey/backbone.marionette –

+0

O esto quizás, http://lostechies.com/derickbailey/2012/03/22/managing-layouts-and-nested-views-with-backbone-marionette/ # comment-2375 –

+0

Marionette es un buen marco. También es posible que desee consultar el backbone.layoutmanager https://github.com/tbranyen/backbone.layoutmanager#readme – Karthik

Respuesta

9

Marionette es definitivamente el camino a seguir. Específicamente, Marionette.Layout es fantástico para intercambiar regiones específicas sin volver a representar toda la página. Consulte algunos de Example Apps de Derick para familiarizarse con el marco.

Le recomiendo que se mantenga alejado del enrutador hasta después de que haya conseguido que su aplicación funcione usando simples eventos antiguos. Luego agregue el soporte del enrutador después. El enrutador debe estar conectado para reflejar el estado de su aplicación, pero no debe depender de él para ser su controlador.

Como un lado, estoy usando RequrieJS en un gran proyecto Backbone de varios módulos y ha sido un regalo del cielo. Es controvertido en la comunidad de BB, pero vale la pena analizar si tendrá muchos componentes interdependientes y desea permitir que otro marco maneje todas las dependencias.

+1

Al igual que Dave señaló en esta respuesta, el diseño ayudará. Específicamente, el objeto Marionette.Region hará la limpieza al intercambiar vistas. Los diseños son vistas que tienen regiones integradas en ellos. –

+0

Gracias chicos, estoy metido en la marioneta hasta las rodillas en este momento. Ha sido una semana extraña de prepararse primero con la columna vertebral, golpear las paredes de ladrillo y luego ordenar todo. Durante un tiempo con Marionette, me sentí como estar de vuelta en el punto de partida, pero lo que hice fue replicar http://bbclonemail.heroku.com/#inbox en mi entorno local, y acabo de extenderlo para tener una tercera aplicación dentro de él. (clonando la aplicación de correo) Se siente realmente bien de estar exponiendo todo de una manera tan limpia. ¿Crees que hay desventajas al usarlo? –

+1

El único inconveniente que veo es la sobrecarga mental de aprender otra capa de abstracción sobre Backbone. Pero una vez que te concentres en Marionette, comenzarás a pensar en términos de estos conceptos de nivel superior, y te encontrarás escribiendo menos del mismo código repetitivo. ¡Quédate con eso y valdrá la pena! –

0

que tenían su mismo problema y quería compartir cómo lo resolví, por lo que re-diseñado el ejemplo Tareas aplicación de los documentos Backbone.js usando mi página de convenciones de transición:

http://ahamlett.com/Backbone.localStorage/

no he Lo probé para detectar fugas de memoria, pero si hay algunos simplemente llama a .unbind() antes de .remove() en el método SetView del enrutador de la aplicación.

Cuestiones relacionadas