我正在尝试实施评论功能,以显示属于单个帖子的评论列表。然后单击编辑并编辑属于单个帖子的所有评论中的任何选定评论。
更新了jsfiddle 。
我可以创建一个属于所选帖子的评论,如上面的小提琴所示。 **但是我无法更新现有评论,评论编辑表单甚至不会显示任何评论。它始终为空白,不会绑定到任何现有注释。
点击editcomment,网址为 posts / 2 / comments / undefined / edit 。这是因为EmBlog.PostCommentRoute& PostEditCommentRoute仍然返回null。
所有已注释掉的代码都是尝试使其失败的不同尝试。我把它们留在这里,所以任何看过这个问题的人都会知道我到目前为止所做的尝试。
始终返回null并且最有可能导致问题的两条路线
EmBlog.PostEditCommentRoute = Ember.Route.extend({
model: function(params) {
var commentEdit = this.modelFor('post').get('comments');
return commentEdit.get(params.comment_id);
//return EmBlog.Comment.find({post: post.get('id'), id: params.comment_id});
//var comment = this.modelFor('post').get('comments');
//return comment.filterProperty('id', params.comment_id);
},
setupcontroller: function( controller, model) {
controller.set('content', model);
}
});
评论路线显示单个帖子
EmBlog.PostCommentRoute = Ember.Route.extend({
model: function(params){
comment = this.modelFor('post').get('comments');
// comment = EmBlog.Comment.find(params.comment_id);
return comment.get(params.comment_id);
// return comment.filterProperty('body', params.comment_id);
},
setupController: function(controller, model) {
//var comment = this.controllerFor('postComments').get('body');
//controller.set('content', comment.filterProperty('body', model));
controller.set('content', model);
},
});
这是路由器。我已经尝试过嵌套的其他组合但是已经确定了这个,因为它是唯一允许添加注释的版本,这就是为什么这个问题只关注更新嵌套的动态段,否则我会问两个:
EmBlog.Router.map(function() {
this.resource("posts", {path: '/posts'}, function(){
this.route('new');
this.resource('post', {path: '/:post_id/'}, function(){
this.route('edit', {path: '/edit'});
this.route('comments', {path: '/comments'});
this.route('newComment');
this.route('comment', {path: '/comments/:comment_id'});
this.route('editComment', {path: '/comments/:comment_id/edit'});
});
});
});
答案 0 :(得分:1)
我从小提琴下载了你的代码并发现了一些问题。
<强>第一强>
您不小心使用了Ember.Router
而不是Ember.Route
。
EmBlog.PostCommentsRoute = Ember.Router.extend({
// ...
EmBlog.PostCommentRoute = Ember.Router.extend({
应该是
EmBlog.PostCommentsRoute = Ember.Route.extend({
// ...
EmBlog.PostCommentRoute = Ember.Route.extend({
<强>第二强>
您不需要在此路由中覆盖model
,默认的Ember行为就可以了。当尚未声明该变量时,您还引用了params_id
。
EmBlog.PostRoute = Ember.Route.extend({
model: function(params) {
post = this.modelFor('posts');
return post.get(params_id);
//return EmBlog.Post.find(params.post_id);
//return this.modelFor('post').filterProperty('id', params.post_id);
},
<强>第三强>
回复您的评论
问题是你要从帖子的上下文链接到editComment,而不是评论本身。修复后,我还将TextArea更改为model.body
而不是body
。
更改已逐项列出in this Gist。现在需要实施编辑。
答案 1 :(得分:1)
修改循环。在您没有传递上下文之前,您在路径中未定义。现在您将每个注释传递给linkTo,以便它可以生成正确的路由。这是一个更新的小提琴http://jsfiddle.net/VrR2T/4/
的链接<script type="text/x-handlebars" data-template-name="post/comments">
<h1> Yes Comments template</h1>
<p> {{#linkTo "post.newComment"}} Add comment{{/linkTo}}</p>
<br/>
{{#each comment in content}}
<br/>
{{comment.body}} <br/>
<p>{{#linkTo "post.editComment" comment}} Edit Comment {{/linkTo}}</p>
{{/each}}
{{outlet}}
</script>
这是更新后的表格。需要绑定到content.body
<script type="text/x-handlebars" data-template-name="post/_commentForm">
<form {{action save on='submit'}}>
{{view Ember.TextArea valueBinding="content.body" placeholder="body"}}
<button type="submit"> save comment </button>
<button {{action 'cancel' content}}> Cancel</button>
</form>
</script>
答案 2 :(得分:0)
问题1:我认为如果你没有改变路径并将其保存为'/:post_id'
会有所帮助问题2:抱歉,我认为我不能在这里提供帮助。