Roteamento Ember.js: como você define uma rota padrão para renderizar imediatamente?
Tenho certeza de que isso ficará claro à medida que eu for mais fundo, mas por enquanto não é óbvio como fazer isso acontecer.
Eu estava seguindo a informação sobreeste artigo útil SO sobre roteamento mas há uma parte importante faltando no exemplo, ou seja, como você obtém a exibição "inicial" para renderizar imediatamente sem ter que clicar no link "home"?
Comecei a investigar os documentos para tentar entender isso, mas, enquanto isso, parece uma pergunta útil ter respondido à posteridade.
Eu tenho jogado com o exemplo de trabalho jsfiddle da pergunta acimaAqui e comparando com este outro exemplo, descobri queparece ter o roteamento padrão de trabalho
Até agora ainda é um mistério.
Código atual:
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");
}
})
});
ATUALIZAÇÃO: solução
Acontece que a razão pela qual o exemplo com o qual eu estava trabalhando não estava funcionando foi porque ele estava usandoEm.State.extend
ao invés deEm.Route.extend
. A parte interessante é que, conforme eu passo e as modifico uma por uma, o exemplo não funciona até eu mudar todas elas.
Aqui está o trabalhoexemplo:
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");
}
})
});