0

我的 html 页面中有这段代码:

<script type="text/x-handlebars" data-template-name="logged">
    <h1>Page</h1>
          {{view.name}}
        {{#view App.LoginButton}}
          <button type="button">This is a clickable area!</button>
        {{/view}}
        
</script>

我的 js 脚本中有这段代码:

App=Ember.Application.create();
App.Route= Ember.Route.extend({
  events: {
   /* turnItUp: function(level){
      alert("ee");
    }*/
  }
});

App.Router.map(function() {
    this.resource('logged', {path: '/'});
});

App.LoginButton= Ember.View.extend({
  click: function(evt) {
   this.get('controller').send('turnItUp', 11); 
  }
});
App.PlaybackController = Ember.Controller.extend({
 events:{
  turnItUp: function(level){
    alert(level);
  }
}
});

当我单击一个按钮时,我收到此错误:

未捕获的错误:没有处理事件“turnItUp”。

为什么?

4

2 回答 2

1

当我单击一个按钮时,我收到此错误:

Uncaught Error: Nothing handled the event 'turnItUp'.

为什么???

因为控制器或路由都没有设置来处理 turnItUp 事件。这是发生了什么:

  1. 用户单击按钮触发App.LogginButton.click()
  2. click()调用get('controller')返回 a <(generated logged controller)>- 可能不是您所期望的。
  3. click()发送turnItUp<generated logged controller>
  4. <generated logged controller>没有turnItUp方法,所以委托给当前路线
  5. 当前路线或其任何父母都没有turnItUp事件,因此您会看到错误

因此,将来要调试这种东西,请尝试添加控制台日志以确保控制器是您认为应该的:

App.LoginButton= Ember.View.extend({
  click: function(evt) {
    console.log('controller: ', this.get('controller').toString());
    this.get('controller').send('turnItUp', 11); 
  }
});

现在需要改变的另一件事是控制器事件不应该嵌套在events属性下 - 这只是用于路由。所以为了让事情顺利进行,试试这个:

App.LoggedController = Ember.Controller.extend({
  turnItUp: function(level){
    alert(level);
  }
});
于 2013-04-23T18:17:33.843 回答
0

您正在寻找的东西在 ember 中被称为 Action

http://emberjs.com/guides/templates/actions/

http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_action

<button {{action turnItUp 11}}>This is a clickable area!</button>

App.PlaybackController = Ember.Controller.extend({
  turnItUp: function( value ){
    alert(value);
  }
})

(假设 PalyBackController 是视图的当前控制器)

于 2013-04-23T14:50:25.847 回答