1

有没有办法触发 itemController 中定义的动作。当我用 触发动作时<button {{action 'inItem' }}>,它会抛出未捕获的错误:没有处理事件“inItem”。. 如果我使用 设置操作的目标<button {{action 'inItem' target=item}}>,则会引发错误Uncaught TypeError: Cannot read property 'apply' of undefined

如何触发 itemController 中定义的操作。

App = Ember.Application.create({
  LOG_TRANSITIONS: true
});

App.Router.map(function(){
   this.resource('posts');           
               
 });

App.PostsRoute = Ember.Route.extend({
  model: function(){
    return [
      {title: 'success'},
      {title: 'winning'},
      {title: 'breakthrough'}
    ];
  }
  
});

App.PostsController = Ember.Array.extend({
  itemController: 'post'
});
App.PostController = Ember.ObjectController.extend({
  isSelected: false,
  
  actions: {
    inItem: function(){
       this.set('isSelected', true);
      //alert('hi');
    }
  }
  
});
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0/handlebars.js"></script>
<script src="http://builds.emberjs.com.s3.amazonaws.com/tags/v1.0.0/ember.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <script type='text/x-handlebars' id='application'>
    {{#link-to 'posts'}} All posts {{/link-to}}
    {{outlet}}
   </script>
  
   <script type='text/x-handlebars' data-template-name='posts'>
   
     <br>
     {{#each item in controller }}
         
       {{#if item.isSelected}}
         {{item.title}}
       {{/if}}
       
       <br>
       
       <button {{action 'inItem' target=item}} {{bind-attr class="isSelected"}}> call itemcontroller action </button>


     {{/each}}
     
     
  </script>
    
</body>
</html>

4

1 回答 1

1

您的控制器应该是扩展ArrayController的,而不是扩展的Array

App.PostsController = Ember.ArrayController.extend({
  itemController: 'post'
});

http://emberjs.jsbin.com/nabuwo/1/edit

于 2014-09-30T21:04:57.813 回答