emberjs嵌套动态路由段返回null并且无法更新子记录

时间:2013-04-10 13:58:17

标签: ember.js handlebars.js ember-router

我正在尝试实施评论功能,以显示属于单个帖子的评论列表。然后单击编辑并编辑属于单个帖子的所有评论中的任何选定评论。

更新了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'});       
     }); 
   });
});

3 个答案:

答案 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:抱歉,我认为我不能在这里提供帮助。