我的应用中的用户有个人资料页面。用户可以查看自己的个人资料和其他用户的个人资料。在他自己的个人资料中,他能够改变他的化身,但当然他不能改变另一个用户的化身。使用配置文件路由的beforeModel
挂钩按需加载头像上传脚本。问题是只有在用户访问自己的个人资料时才加载此脚本,而不是其他用户的个人资料。
这是我的代码:
路由器:
Router.map(function () {
this.resource('user', { path: '/:user_id' }, function () {
this.resource('profile');
});
});
申请路线:
var ApplicationRoute = Em.Route.extend({
model: function () {
return {
currentUser: this.config.currentUser
};
}
});
用户路线:
var UserRoute = Em.Route.extend({
model: function (params) {
var currentUser = this.modelFor('application').get('currentUser');
if (currentUser.get('id') === params.user_id) {
return currentUser;
} else {
// getUser returns promise
return this.data.getUser(params.user_id);
}
}
});
用户控制器:
var UserController = Em.ObjectController.extend({
needs: 'application',
isCurrent: function () {
return (this.get('id') === this.get('controllers.application.currentUser.id'));
}.property('id')
});
个人资料路线:
var uploaderScriptInjected = false;
var ProfileRoute = Em.Route.extend({
beforeModel: function () {
if (!uploaderScriptInjected && this.uploaderNeeded()) {
return $.getScript(this.config.assets.uploader)
.then(function () {
uploaderScriptInjected = true;
});
}
},
uploaderNeeded: function () {
// This is not working:
// return this.controllerFor('user').get('isCurrent');
},
model: function () {
var user = this.modelFor('user');
return Em.RSVP.hash({
photos: this.data.photosByUser(user.get('id'))
});
}
});
查看个人资料路线的beforeModel
和uploaderNeeded
方法。我想使用用户控制器的isCurrent
属性,但用户路由的setupController
方法在 uploaderNeeded
之后被称为,这意味着用户控制器的实例没有'已生成并且尚未设置其模型。当然我可以使用这段代码:
uploaderNeeded: function () {
return this.modelFor('application').get('currentUser.id') === this.modelFor('user').get('id');
}
...但它重复用户控制器的isCurrent
属性逻辑。
有没有办法从配置文件路由的方法访问用户控制器的属性?
答案 0 :(得分:0)
尝试扩展父控制器,例如
App.FirstController = Ember.ArrayController.extend({})
然后
App.SecondController = Ember.FirstController.extend({})