Is there a way to have a conditional redirect in the Ember.js Router, without breaking internal consistency of the router?
What you could do (as of today), is something like that:
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({
// ...
})
})
Do not miss the Ember.run.next
as while you are in enter
, the state transition is always pending, so you have to transition after that.
We use it as shown for authent, but you could imagine using it for whatever condition you have to...
connectOutlets
instead of enter
you shouldn't need the Ember.run.next
. –
Civilly connectOutlets
? –
Whiting Ember.run.next(function () { ... });
–
Valentin The new router now includes a
beforeModel
hook which you could over-ride to include conditional logic while transitioning to a route. The beforeModel hook will be called before the
model
hook is called and it gets passed a
transition
object. You can decide if you want to redirect to another route using
transitionToRoute()
or you could abort the transition if you don't want to redirect by calling
transition.abort()
Depending on what you're trying to do, you may be looking for conditional transitions. This is covered in another stackoverflow question, the TLDR of which is to check this fiddle.
© 2022 - 2024 — McMap. All rights reserved.
connectOutlets
? (I'm kind of a noob in ember, so maybe I just don't understand what you're trying to do) – Carobredirect:
element you can override, it is in the current guide. – Allround