我的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 ???抱歉我的英语不好,并提前致谢
答案 0 :(得分:1)
当我点击按钮时,我收到此错误:
Uncaught Error: Nothing handled the event 'turnItUp'.
WHY ???
因为控制器或路由都没有设置为处理turnItUp事件。这是正在发生的事情:
App.LogginButton.click()
click()
调用get('controller')
,返回<(generated logged controller)>
- 可能不是您所期望的。click()
将turnItUp
发送给<generated logged controller>
<generated logged controller>
没有turnItUp
方法,因此委托当前路线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);
}
});
答案 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是视图的当前控制器)