如何在Ember发送活动?

时间:2013-04-23 14:31:50

标签: javascript javascript-events ember.js handlebars.js ember-data

我的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);
  }
}
});

当我点击按钮时,我收到此错误:

Uncaught Error: Nothing handled the event 'turnItUp'.

WHY ???抱歉我的英语不好,并提前致谢

2 个答案:

答案 0 :(得分:1)

  

当我点击按钮时,我收到此错误:

Uncaught Error: Nothing handled the event 'turnItUp'.
  

WHY ???

因为控制器或路由都没有设置为处理turnItUp事件。这是正在发生的事情:

  1. 用户点击触发App.LogginButton.click()
  2. 的按钮
  3. click()调用get('controller'),返回<(generated logged controller)> - 可能不是您所期望的。
  4. click()turnItUp发送给<generated logged controller>
  5. <generated logged controller>没有turnItUp方法,因此委托当前路线
  6. 当前路线上没有turnItUp事件或任何父母的事件,因此您看到错误
  7. 所以将来要调试这种事情,尝试添加控制台日志以确保控制器是您认为的应该是:

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

答案 1 :(得分:0)

您正在寻找的内容称为“灰烬中的动作”

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是视图的当前控制器)