我的應用中的用戶有配置文件頁面。用戶可以查看自己的配置文件和其他用戶的配置文件。在他自己的檔案中,他能夠改變他的頭像,但他當然不能改變另一個用戶的頭像。頭像上傳的腳本按需加載,使用簡介路由的beforeModel
鉤子。問題是僅當用戶訪問他自己的配置文件時才加載此腳本,而不是其他用戶的配置文件。Ember.js:訪問父路由的控制器
這裏是我的代碼:
路由器:
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
財產邏輯。
有什麼辦法從配置文件路由的方法訪問用戶控制器的屬性?
也許我失去了一些東西,但它如何能幫助我嗎? – th0r
你可以使配置文件控制器擴展UserController ..這必須工作,但我不知道 – Stakoov