emberjs嵌套动态路由段返回空并无法更新子记录(emberjs nested dynamic r

2019-08-21 08:55发布

我想实现一个注释的功能 ,以显示属于单个帖子的评论列表。 点击修改,然后从属于单篇文章的所有评论从编辑任何选择的评论。

更新的jsfiddle

我能创造如上面的小提琴看到属于选定的信息进行评论。 **但是我无法更新现有的注释和评论编辑表格甚至不会显示任何评论。 它始终是空白,没有绑定到任何现有注释。

点击editcomment网址为文章/ 2 /评论/未定义/编辑 。 这是因为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'});       
     }); 
   });
});

Answer 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>


Answer 2:

我从小提琴下载代码,并发现了一些问题。

第一

你不小心用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在这条线路中,默认灰烬行为是好的。 你还引用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。 一旦被固定,我也改变了文本区域是model.body ,而不是body

这些变化逐项在这个要点 。 现在,编辑需要实现。



Answer 3:

问题1:我认为这将有助于如果你没有改变路径,并保持它为“/:POST_ID”

问题2:对不起,我不认为我能在这里帮助。



文章来源: emberjs nested dynamic route segment returning null and unable to update child record