こんにちは、Ember.js で投稿の作成者に対してのみ投稿の削除ボタンを表示する方法に何日も悩まされています (これを構築するために ember-cli を使用しています)。「投稿(リスト)にカーソルを合わせたとき、投稿の作成者が現在ログインしているユーザーと等しい場合、削除ボタンを表示する」というロジックをどこに置くべきかわかりません。私を助けてください。
テンプレートでapp/templates/posts.hbs
{{#each}}
<div class="eachPost">
{{#view 'posts'}}
<div class="postProfilePhoto">
{{#link-to 'users' }}
<img src="" alt="Profile Photo">
{{/link-to}}
</div>
<div class="eachPostContent">
<p class="postAuthor"><strong>{{user.id}}</strong></p>
<p class="postContent">{{body}}</p>
<span class="timePosted"><em>somtimes ago</em></span>
{{#if view.entered}}{{#if isAuthor}}
<a class="deletePost" {{action "removePost" this}}>Delete</a>
{{/if}}{{/if}}
</div>
{{/view}}
</div>
{{/each}}
ビューでapp/views/posts.js
var Posts = Ember.View.extend({
classNames: ['eachPostContent'],
mouseEnter: function(event){
this.set('entered', true);
this.get('controller').send('isAuthor', this.get('post').user);
},
mouseLeave: function(){
this.set('entered', false);
}
});
export default Posts;
コントローラーでapp/controllers/posts.js
var PostsController = Ember.ArrayController.extend({
...
isAuthor: function(user){
if(this.get('session').user !== null && user === this.get('session').user){
return true;
} else {
return false;
console.log('You are not author');
}
}
}
});
export default PostsController;
解決した
のapp/templates/posts.hbs
{{#each itemController="post"}}
<div class="eachPost">
作成したapp/controllers/post.js
var PostController = Ember.ObjectController.extend({
isAuthor: function(){
return this.get('user') === this.get('session').user;
}.property('user')
});
export default PostController;
から次のコードを削除しますapp/views/posts.js
this.get('controller').send('isAuthor', this.get('post').user);
isAuthor
から関数を削除しましたapp/controllers/posts.js