I'm sure this will become clear as I dig in deeper, but for now it's not obvious how to make this happen.
I was following the info on this helpful SO article about routing but there is an important piece missing from the example, i.e. how do you get the 'home' view to render right away without having to click the 'home' link?
I've started digging into the docs to try to make sense of this, but meanwhile it seems like a useful question to have answered for posterity.
I've been playing with the working jsfiddle example from the above question here and comparing with this other example I found that seems to have the default routing working
So far it's still a mystery.
Current code:
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");
}
})
});
UPDATE: Solution
It turns out that the reason the example I was working with was not working was because it was using Em.State.extend
rather than Em.Route.extend
. The interesting part is that as I step through and change them over one by one the example doesn't work until I change all of them over.
Here is the working example:
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");
}
})
});
Index Routes. At every level of nesting (including the top level), Ember automatically provides a route for the / path named index . To see when a new level of nesting occurs, check the router, whenever you see a function , that's a new level. For example, if you write a simple router like this: app/router.js Router.
Here is the explanation: {{outlet}} -> This will provide a stub/hook/point into which you can render Components(Controller + View). One would use this with the render method of routes. In your case you will likely have a details route which could look like this.
In Ember. js, controllers allow you to decorate your models with display logic. In general, your models will have properties that are saved to the server, while controllers will have properties that your app does not need to save to the server.
It seems this is done diffently now. I had success with this way of doing it:
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({
});
With Ember CLI, you can put the redirect in index.js in your root of routes directory:
import Ember from 'ember';
export default Ember.Route.extend( {
redirect: function() {
this.transitionTo('dashboard');
}
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With