2012-06-25 15 views
10

¿Hay alguna manera de tener una redirección condicional en el enrutador Ember.js, sin romper la consistencia interna del enrutador?Emberjs: redirección condicional en el enrutador

+0

Puede explicar un poco más por qué' volver a la transición a una ruta diferente de 'connectOutlets'? (Soy un novato en brasas, así que tal vez no entiendo lo que estás tratando de hacer) – MilkyWayJoe

+1

Por cierto, las rutas ahora tienen un elemento 'redirect:' que puedes anular, está en el actual guía. – totowtwo

Respuesta

23

Lo que podría hacer (a fecha de hoy), es algo así:

root: Ember.Route.extend({ 
    index: Ember.Route.extend({ 
     enter: function(router) { 
      var logged = /* get from appropriated source... */; 
      Ember.run.next(function() { 
       if (logged) { 
        router.transitionTo('loggedIn'); 
       } else { 
        router.transitionTo('loggedOut'); 
       } 
      }); 
     } 
    }), 

    loggedIn: Ember.Route.extend({ 
     // ... 
    }), 

    loggedOut: Ember.Route.extend({ 
     // ... 
    }) 
}) 

No se pierda la Ember.run.next como durante su estadía en enter, la transición de estado siempre está pendiente, por lo que tiene a la transición después de esto.

lo usamos como se muestra para autentificación, pero se podría imaginar usarlo para cualquier condición que tiene que ...

+4

Si lo hace en 'connectOutlets' en lugar de' enter', no debería necesitar 'Ember.run.next'. –

+0

¡Gracias por la precisión! :-) –

+0

¿tiene un ejemplo de cómo hacerlo con 'connectOutlets'? – Qrilka

3

El nuevo router ahora incluye un gancho

beforeModel 

que se podría incluir la invalidación lógica condicional durante la transición a una ruta. El gancho beforeModel será llamada antes de que el gancho de

model 

se llama y se pasa un objeto

transition 

. Puede decidir si desea volver a dirigir a otra ruta utilizando

transitionToRoute() 

o podría abortar la transición si no quiere volver a dirigir llamando

transition.abort() 
Cuestiones relacionadas