Ember.js动作错误:"没有处理事件"

时间:2013-05-14 18:49:06

标签: ember.js

我正在处理我的第一个Ember.js应用程序,虽然我有一个模板加载,当我尝试调用我在控制器中定义的操作时,我收到一个错误:“未捕获的错误:什么都没有处理'showNew'事件。“我不确定我是否错误地设置了路由和控制器,或者我是否遗漏了其他内容。

./ router.js:

Seanchai.Router.map(function(){
  this.resource("stories", function(){
    this.route('new');
  });
});

Seanchai.StoriesRoute = Ember.Route.extend({
  model: function(){
    Seanchai.Story.find();
  }
});


Seanchai.Router.reopen({
  location: 'history'
});

./控制器/ stories_controller.js:

Seanchai.StoriesController = Ember.ArrayController.extend({    

  showNew: function() {
    this.set('isNewVisible', true);
  }
});

./模板/故事/ index.hbs:

<table>
  <thead>
  <tr>
    <th>ID</th>
    <th>Name</th>
  </tr>
  </thead>
  <tbody>
    {{#each stories}}
      {{view Seanchai.ShowStoryView storyBinding="this"}}
    {{/each}}
    {{#if isNewVisible}}
      <tr>
        <td>*</td>
        <td>
          Test
        </td>
      </tr>
    {{/if}}
    </tbody>
</table>
<div class="commands">
  <a href="#" {{action showNew}}>New Story</a>
</div>

如果我将动作移动到路由器中,就像这样,它可以工作,但根据文档看起来我应该能够在控制器中执行此操作。

更新./router.js:

Seanchai.Router.map(function(){
  this.resource("stories", function(){
    this.route('new');
  });
});

Seanchai.StoriesRoute = Ember.Route.extend({
  model: function(){
    Seanchai.Story.find();
  },
  events: {
    showNew: function() {
      this.set('isNewVisible', true);
    }
  }
});


Seanchai.Router.reopen({
  location: 'history'
});

我显然错过了什么,但我不确定是什么。

2 个答案:

答案 0 :(得分:3)

我猜你的showNew事件没有在控制器上触发,因为你有一个stories.index模板,所以你应该挂钩到应该是StoriesIndexController的通信控制器:

Seanchai.StoriesIndexController = Ember.ArrayController.extend({    
  showNew: function() {
    this.set('isNewVisible', true);
  }
});

希望有所帮助

答案 1 :(得分:0)

我认为应该是:

Ember.ObjectController.extend({    

  showNew: function() {
    this.set('isNewVisible', true);
  }

});

而不是:

Ember.ArrayController.extend({    

  showNew: function() {
    this.set('isNewVisible', true);
  }
});

本指南可能会有所帮助 - Ember.js - Templates