ユーザーの属性に基づいてコントローラのプロパティを設定するのに少し問題があります。今は、ユーザーがグループの管理者になることができるシンプルな設定があります。私はそれを作って、ユーザーがグループの管理者であれば、そのグループのグループ/ショーページに行くとそのグループの投稿を作成するフォームがありますが、これは通常のメンバーには表示されません管理者ではないember - ユーザー/モデルの属性に基づいてコントローラのプロパティを設定していますか?
は今の私のコントローラは、次のようになります。
import Ember from 'ember';
export default Ember.Controller.extend({
loggedInUser: Ember.inject.service('user'),
isAdmin: Ember.computed(function() {
var that = this;
//getting the current user and the list of groups they are
//the admin of
this.get('loggedInUser').get('currentUser.administrating')
.then(function(groups) {
//getting the id of the current group
var groupID = that.get('group').get('id');
//looping over each group the user is an admin of
//and comparing the id to the current groups id
groups.forEach(function(group) {
if (group.get('id') == groupID) {
that.set('isAdmin', true);
}
})
});
})
});
問題は、これが唯一の初めての作品です。たとえば、ユーザーが特定のグループのグループ/ショーページにアクセスし、そのグループの管理者である場合は、そのフォームがきれいに表示されます。ただし、他のグループの他のグループ/ショーページをさらに訪問すると、そのユーザーがそのグループの管理者ではない場合でも、フォームが表示されます。私はいくつかの掘り下げを行ったし、それはコントローラがシングルトンであり、他のページに移動するときに問題が残っているようだ。私はsetupController
をルートに使用してisAdmin
をfalseに設定しましたが、毎回そのプロパティをfalseに設定するだけです。これを行う適切な方法はありますか?
A com puted関数は(通常)約束を返すことができません。また、再計算を開始するための依存プロパティも必要です。最後に、何かを返さなければなりません。何も返さないのです。この特定のケースでは、オブザーバを使用することを検討します。オブザーバは、プロパティが変更されるたびに同期して再実行されます。ところで、あなたの 'forEach'はおそらく' includes'を使って書き直すことができます。 –