我有以下授权路线。从其继承的其他路由根据登录用户
的特定角色限制访问App.AuthorizedRoute = Em.Route.extend({
beforeModel: function(transition){
var access = this.get('access');
if (Em.isEmpty(access)) {
return;
}
var deferred = Ember.Deferred.create();
//----------------------------------------------------
// trigger the following after the 'model' property in
// users controller is loaded
deferred.resolve();
return this.check(this.controllerFor('users').get('model.role'));
//----------------------------------------------------
return deferred;
},
check: function(role){
if (this.get('access').contains(role)) {
console.debug("[DEBUG] You are "+role+", go ahead");
return true;
}
console.debug("[DEBUG] You are "+role+", you can not access to dashboard");
this.transitionTo('users');
}
});
我的问题是,我不知道Ember是否有一些事件监听器,如this.controllerFor('users').get('model').on('loaded', function(){...});
来监听对象的更改。
我是Ember的新人。我应该把它放在上面代码的评论部分?请帮帮我。
**更新:
我有路由/ users / 1 / secret,以下是从授权路由继承的秘密路由:
App.UsersDashboardRoute = App.AuthorizedRoute.extend({
access: ['admin'],
model: function(){
// fetch some data here
}
});
因此,在获取秘密数据之前,必须通过beforeModel钩子检查user1的角色。那么如何知道用户控制器的模型已经加载,然后我可以调用this.check(this.controllerFor('users').get('model.role'))