我从ApplicationController init事件中的元标记中获取当前用户:
App.ApplicationController = Ember.Controller.extend({
needs: ['currentUser'],
init: function() {
'use strict';
this._super();
var attributes = $('meta[name="current-user"]').attr('content');
if (attributes) {
this.set('controllers.currentUser.content', App.User.create().setProperties(JSON.parse(attributes)));
}
},
在需要对用户进行身份验证的每个路由中,我有一个重定向挂钩,如果未设置currentUser,则应该重定向:
App.UserEditRoute = Ember.Route.extend({
redirect: function() {
if (this.controllerFor('currentUser').get('isSignedIn') === false) {
this.transitionTo('user.login');
}
}
});
问题是Route重定向事件在ApplicationController.init之前触发。
实现这一目标的正确方法是什么?
谢谢!
答案 0 :(得分:1)
而不是ApplicationController.init()
这个逻辑属于路线。这样的事情应该有效:
App.ApplicationRoute = Ember.Route.extend({
beforeModel: function() {
var attributes = $('meta[name="current-user"]').attr('content');
if (attributes) {
var user = App.User.create().setProperties(JSON.parse(attributes));
this.controllerFor('currentUser').set('content', user);
}
}
});