2012-06-22 11 views
6

Estoy seguro de que esto se aclarará a medida que profundice más, pero por ahora no es obvio cómo hacer que esto suceda.Enrutamiento de Ember.js: ¿cómo se establece una ruta predeterminada para procesar de inmediato?

Estaba siguiendo la información en this helpful SO article about routing pero falta una pieza importante en el ejemplo, es decir, ¿cómo se obtiene la vista "de inicio" inmediatamente sin tener que hacer clic en el enlace "de inicio"?

He empezado a buscar en los documentos para tratar de dar sentido a esto, pero mientras tanto parece una pregunta útil para la posteridad.

He estado jugando con el ejemplo jsFiddle de trabajo de la cuestión here arriba y la comparación con este otro ejemplo, me encontré con que seems to have the default routing working

Hasta el momento sigue siendo un misterio.

código actual:

App.Router = Em.Router.extend({ 
    enableLogging: true, 
    location: 'hash', 

    root: Em.State.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.State.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.State.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet('home'); 
     } 
    }), 

    // STATES 
    profile: Em.State.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

ACTUALIZACIÓN: Solución

Resulta que la razón por el ejemplo que estaba trabajando no estaba funcionando era porque estaba usando Em.State.extend vez que Em.Route.extend. La parte interesante es que a medida que avanzo y los cambio uno por uno, el ejemplo no funciona hasta que los cambio a todos.

Aquí es el example de trabajo:

App.Router = Em.Router.extend({ 
    enableLogging: true, 
    location: 'hash', 

    root: Em.Route.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.Route.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.Route.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet({name: 'home'}); 
     } 
    }), 

    // STATES 
    profile: Em.Route.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

Respuesta

3

U puede hacer una redirección desde el índice de la ruta a casa. Ejemplo de trabajo: http://jsfiddle.net/FRfBt/

+1

Gracias por el ejemplo de trabajo. Me tomó un tiempo descubrir cuál era la diferencia de mi ejemplo anterior, pero finalmente lo descubrí. El ejemplo que di no funcionó porque estaba usando 'Em.State.extend' en lugar de' Em.Route.extend' – radixhound

9

Parece que esto se hace actualmente. Tuve éxito con esta forma de hacerlo:

App = Ember.Application.create(); 

App.Router.map(function() { 
    // 'index' route is default 
    this.resource('dashboard'); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     // this redirects/to /dashboard 
     this.transitionTo('dashboard'); 
    } 
}); 

App.DashboardRoute = Ember.Route.extend({ 
}); 
6

Con Ember CLI, se puede poner la redirección en index.js en la raíz del directorio de rutas:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    redirect: function() { 
    this.transitionTo('dashboard'); 
    } 
}); 
Cuestiones relacionadas