TL; DR?如果你想要(幾乎)工作代碼,我做了一個jsFiddle here。是否可以取消Ember狀態轉換?
假設我有一個Ember路由器如下所述。我想讓它管理當前用戶的身份驗證。是否可以取消狀態轉換?
App.Router = Ember.Router.extend({
init: function() {
this.set('authenticated', false);
return this._super();
},
/*
* "Authentication" method - just toggle the state
*/
toggleAuthentication: function() {
var auth = this.get('authenticated');
this.set('authenticated', !auth);
if (auth) {
this.transitionTo('root.home');
} else {
this.transitionTo('loggedIn.home');
}
},
/*
* Root state
* Logged out state tree
*/
root: Ember.State.extend({
home: Ember.State.extend()
}),
/*
* Authenticated state tree
*/
loggedIn: Ember.State.extend({
/* Enter checks user is authenticated */
enter: function(manager, transition, async, resume) {
if (manager.get('authenticated')) {
// proceed
} else {
// cancel the transition & redirect to root.home
}
},
/* Exit sets authenticated to false just to be sure */
exit: function(manager, transition, async, resume) {
manager.set('authenticated', false);
},
/* Sub-states */
home: Ember.State.extend(),
news: Ember.State.extend({
list: Ember.State.extend()
})
})
});
這是覆蓋在另一計算器問題 http://stackoverflow.com/questions/11190928/emberjs-conditional-redirect-in-router –