2012-10-10 88 views
6

Tengo una aplicación de brasas y el concepto de la toma de corriente y la conexión de la toma está bien, lo entiendo. Lo que no entiendo es cómo tener más de una vista/vista de controlador dentro de otra sin anidamiento insano.Ember.js Router App Architecture - Cómo tener múltiples pares de vista/controlador anidados

Supongamos que estoy diseñando clonación de icloud donde tengo funcionalidad de correo electrónico y galería de fotos. Ahora bien, si yo quería lograr algo así como

*********************************************************** 
* INBOX LIST  ** COMPOSE OR VIEW MESSAGE    * 
*    **          * 
*    **          * 
*    **          * 
*    **          * 
* CONTACTS LIST **          * 
*    **          * 
*    **          * 
*    **          * 
*    **          * 
*********************************************************** 

La forma en que me gustaría diseñar este sería algo así como

EmailController/View 
|-- SplitViewController/View 
    |-- InboxListController/View 
    |-- ContactsListController/View 
    |-- ComposeMessageController/View 
    |-- ReadMessageController/View 

Dónde puedo hot swap éstos al nivel de la SplitView o eliminarlos todos juntos, pero no veo una buena manera de hacerlo con solo un outlet permitido. Me forzaría a seguir cosas dentro de cosas que no deberían estar anidadas. Utilizando el enfoque de toma única, mi estructura se parecería más a

EmailController/View 
|-- SplitViewController/View 
    |-- InboxListController/View 
     |-- ContactsListController/View 
      |-- ComposeMessageController/View 
       |-- ReadMessageController/View 

¿Cómo puedo encontrar un estilo de arquitectura que encaja con Ember.js/router que todavía permite la anidación más complejo?

Respuesta

8

¿Sabía que puede nombrar los puntos de venta? Por ejemplo, en la plantilla SplitView, puede tener uno {{}} inboxListView salida, una salida de contactsListView {{}} etc ... cuando haces tus cosas connectOutlets, usted puede hacer esto como:

splitViewController.connectOutlet({name: 'inboxList', outletName: 'inboxListView'}) 
splitViewController.connectOutlet({name: 'contactsList', outletName: 'contactsListView'}) 

y y así sucesivamente ...

+0

Entonces, si utiliza diferentes puntos de acceso con nombre para diferentes vistas/objetos modelo en SplitView, ¿qué aspecto tendría su enrutador al llenar los puntos de venta anidados con datos? splitViewController.connectOutlet ({name: 'inboxList', outletName: 'inboxList'}, router.get ('store'). findAll (App.Inbox))) y splitViewController.connectOutlet ({name: 'contactsList', outletName: 'contactsList'}, router.get ('store'). findAll (App.Contact)))? –

+0

sonar así, sí, pero tienen que poner el contexto en el hash. '{name: 'contactsList', outletName: 'contactsList', context: router.get ('store'). findAll (App.Contact)})' ver http://emberjs.com/api/classes/Ember.ControllerMixin .html # method_connectOutlet para más detalles –

+0

@ sly7_7 ¡Es una gran noticia! Gracias :) – wmarbut