我有一篇帖子,里面有很多评论。问题是我能够获取所有评论,但我无法获取单个评论,因此无法编辑单个评论。由于我无法获取单个评论,这意味着我无法在交易中添加单个记录或编辑单个记录。
评论是侧载的,不会被路由支持,我不希望任何评论相关控制器的路由。所以我使用 controllerFor 在ApplicationRoute中为CommentController设置模型,然后使用[needs] api将模型包含在可能需要模型内容的其他注释相关控制器中。
您可以点击发布 - >来查看评论。然后点击帖子标题 - > 点击添加评论 *然后保存并重新点击 editcomment 。
这是 jsfiddle ,但与此问题相关的相关位如下:
EmBlog.ApplicationRoute = Ember.Route.extend({
setupController: function() {
this.controllerFor('comment').set('model', EmBlog.Comment.find());
}
});
评论控制器
//Even when I use ArrayController, the error is still there
EmBlog.CommentController = Ember.ObjectController.extend({
content: null
});
处理编辑的控制器,所有错误都发生在editComment方法中
EmBlog.CommentEditController = Ember.ObjectController.extend({
needs: ['comment'],
isEditing: false,
editComment: function(post) {
var comment = this.get('controllers.comment.content');
var yk = comment.get('post');
//this line is undefined
console.log(yk);
var commentEdit = this.set('content', comment);
console.log(commentEdit);
transaction = this.get('store').transaction();
//Uncaught Error: assertion failed: You must pass a record into transaction.add()
transaction.add(commentEdit);
this.transaction = transaction;
this.set('isEditing', true);
}
});
发布/展示的把手
<script type="text/x-handlebars" data-template-name="posts/show">
{{render 'comment/edit' comment}}
</script>
答案 0 :(得分:0)
现在一切都是 working and here is the jsfiddle ,我可以编辑灯具中的评论。
但唯一存在的问题是我只能编辑灯具中的第一个注释。我无法编辑第二条评论或新评论无法修改我添加的任何新评论。
我基本上通过需要api在postShow中获取帖子,然后我获得了帖子的id并将其作为查找参数传递给** EmBlog.Comment.find **。然后我将 EmBlog.CommentEditController 的内容设置为我们刚刚执行的查找结果。在此之后,我使用 transaction.add(this.get(&#39; content&#39;))
>EmBlog.CommentEditController = Ember.ObjectController.extend({
needs: ['comment', 'postsShow'],
isEditing: false,
editComment: function() {
var post = this.get('controllers.postsShow.content');
console.log(post);
var postId = post.get('id');
console.log(postId);
comment = EmBlog.Comment.find(postId);
console.log(comment);
transaction = this.get('store').transaction();
var updatedContent = this.set('content', comment);
console.log(updatedContent);
console.log(this.get('content'));
transaction.add(this.get('content'));
console.log(transaction);
this.transaction = transaction;
this.set('isEditing', true);
},
save: function(){
var comment = this.get('content');
comment.one('didUpdate', this, function() {
this.set('isEditing', false);
});
this.transaction.commit();
this.transaction = null;
console.log(this.get('content'));
}
});