2011-12-20 8 views
10

Tiene curiosidad sobre el procedimiento adecuado, o al menos un procedimiento común para usar sproutcore-routing.Procedimiento adecuado para usar el enrutamiento sproutcore

En el leerme no se muestra este ejemplo básico para el enrutamiento:

SC.routes.add(':controller/:action/:id', MyApp, MyApp.route); 

Estoy asumiendo que en la mayoría de los casos MyApp.route llamarían la acción suministrado en el controlador suministrado. Mi pregunta es más acerca de más allá de este paso cómo manejar las cosas de configuración/desmontaje para una aplicación donde tiene muchas vistas principales.

¿Las personas crean instancias de controladores nuevos cuando el controlador cambia y comienzan siempre con una lista limpia de datos y vistas? ¿O es más común/aconsejable crear una instancia de todos los controladores y demás al cargar y simplemente usar el enrutamiento para mostrar/ocultar vistas primarias?

Supongo que la misma pregunta se produce al rebotar entre las acciones dentro de un controlador. ¿Es apropiado hacer un desmontaje, especialmente en ataduras/oyentes, y luego restablecerlos si se retira la acción?

Mi pregunta puede ser un poco confusa, pero básicamente me pregunto cómo las personas manejan muchas vistas principales, y se ocupan de la limpieza para que las cosas no queden obsoletas o mastiquen muchos recursos.

Respuesta

2

En la mayoría de las aplicaciones y ejemplos de Ember y Sproutcore que he visto, los controladores se crean instancias en la inicialización de la aplicación. Las rutas generan cambios de estado en los gráficos de estado, donde los controladores se actualizan y las vistas se crean/destruyen según sea necesario.

2

Tengo la siguiente configuración.

en mi Ember.Application.create() tengo el siguiente código:

MyApp.routes = Em.Object.create({ 
     currentRoute: null, 

     gotoRoute: function(routeParams) { 
      console.log('MyApp.routes gotoRoute. type: ' + routeParams.type + ' action: ' + routeParams.action + " id: " + routeParams.id); 
      if (routeParams.type === 'expectedType' && routeParams.action === 'expectedAction' && routeParams.id) { 
       //find item with ID and load in controller 
       MyApp.MyController.findItemWithId(routeParams.id); 
       //Navigate to the correct state 
       MyApp.stateManager.goToState('stateName'); 
      } 
     } 
    }) 

    SC.routes.add(":action/:type/:id", MyApp.routes, 'gotoRoute'); 

Entonces, al hacer clic en las cosas que debe hacer que el URL para cambiar lo que hago:

SC.routes.set("location", "show/item/ID-123-123"); 

Ahora su aplicación debería estar escuchando los cambios en la URL y provocar que se realice la acción correcta en función de la parte URL.

Probablemente podría mover el MyApp.MyController.findItemWithId (routeParams.id); a la función enter() del diagrama de estado (si los está usando), pero necesita almacenar ese ID en algún lugar de algún controlador.

Cuestiones relacionadas