Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js emberjs-RC2-如何从控制器访问路由器实例&;行动不';t气泡到路由器_Ember.js_Ember Router - Fatal编程技术网

Ember.js emberjs-RC2-如何从控制器访问路由器实例&;行动不';t气泡到路由器

Ember.js emberjs-RC2-如何从控制器访问路由器实例&;行动不';t气泡到路由器,ember.js,ember-router,Ember.js,Ember Router,在路由器中,我有一个事件“removeComment”。在控制器中,如果通过this.get('target').send('removeComment',context)访问它;,我得到错误没有处理事件“removeComment”。当我使用this.get('target.router').send('removeComment',comment)时,错误变成对象#没有方法“send”。使用this.router.send('removeComment',comment)将产生错误:无法读取

在路由器中,我有一个事件“removeComment”。在控制器中,如果通过this.get('target').send('removeComment',context)访问它;,我得到错误没有处理事件“removeComment”。当我使用this.get('target.router').send('removeComment',comment)时,错误变成对象#没有方法“send”。使用this.router.send('removeComment',comment)将产生错误:无法读取未定义的属性“send”

另外,仅将“removeComment”操作发送到PostEditController不会在控制器中冒泡,直到路由

如何从emberjs rc2和routerV2中的控制器访问路由器实例

路由器:

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

     });    
 });
});
控制器

 EmBlog.PostEditCommentController = Ember.ObjectController.extend({

   destroyMe: function(comment) {
     this.get('target.router').send('removeComment', comment);
   } 
});
路由器

EmBlog.PostEditCommentRoute = Ember.Route.extend({
   events: { 
      removeComment: function(context) {
       var comment = context.get('content');
       comment.deleteRecord();
       comment.get('store').commit();
       this.transitionTo('post.index');
     }          
    }
});
我正在post/comments模板中访问它。这是该模板的控制器

EmBlog.PostCommentsController = Ember.ArrayController.extend({
  needs: ['postEditComment']
});
帖子/评论模板

<script type="text/x-handlebars" data-template-name="post/comments">
     {{#each controller}}

     <p><a href='#' {{action destroyMe this target="controller.controllers.postEditComment"}}> Destroy </a></p>

    {{/each}}

 </script>

{{{#每个控制器}}

{{/每个}}
感谢updae,收起小提琴,它帮助很大:)。我想我知道这里发生了什么

首先,控制器中的destroyMe函数不正确,它应该是正确的

destroyMe: function(comment) {
  this.get('target').send('removeComment', comment);
}
然后,您在post.comments的模板中调用它,但在“PostEditCommentRoute”中实现它,它是PostCommentsRoute的子例程。因此,在PostCommentsRoute中调出事件应该可以让它正常工作

现在,作为对代码的总体评论,有一些奇怪的事情,例如

<p>{{#linkTo 'post.comments'}}  comments{{/linkTo}}</p>  

{{render 'post.comments' comments}}

这是默认行为,因此您不必覆盖它。

您可以添加您的路线图吗?我认为这个.get('target').send('removeComment',context)`肯定会起作用,但我怀疑这是发送到其他路径的。谢谢您的时间。我已经在问题的顶部添加了路由器,并决定也添加一个。感谢sly7_7的所有反馈。我已经删除了setupController,它们保留默认设置。对于已渲染视图的注释代码,我已使用#render helper删除了该位。我正在测试这两个,一定是错误地遗漏了一个未注释的。您是对的,将removeComment向上移动到PostCommentsRoute会使事件被调用,但现在会出现新的错误:无法调用undefined的方法“deleteRecord”。我正在调查原因。这个如果我解决了,我会通知你的。感谢您的指导。我已经使用调试器在控制台中查找了“removeComment”事件。这一行存在问题:var comment=context.get('content')。在控制台中,如果我键入comment,它是未定义的。但是当我输入context时,我得到了我想要销毁的正确对象,但是它没有被分配给comment变量。是的,我认为context指的是你传递给send方法的对象,所以它是comment本身。你应该可以在上面调用deleteRecord。感谢你的友好姿态和花时间帮助我解决这个问题。有时似乎要解决问题,需要去掉调试器语句。享受你的一天。干杯,帮帮忙:)我希望你能继续玩下去
setupController: function(controller, model){
  controller.set('content', model);
}