当我在Ember.js中使用新的路由功能时,似乎无法从其模板访问视图上定义的属性和操作处理程序。相反,只有控制器的属性可用,应用程序在路由器中查找操作处理程序。
以下是问题的示例:http://jsfiddle.net/InMatrix/wtUML/3/
如果您点击我的个人资料--->照片--->测试,您将在控制台中收到此错误:
无法响应状态中的事件testButton root.profile.photos。
显然,App.PhotosView中定义的以下操作处理程序不可用于该事件。
App.PhotosView = Em.View.extend({
templateName: 'photos',
testButton: function(){
alert('test Button');
}
});
有没有办法让我的动作处理程序保存在相关的视图类中?我错过了什么吗?
答案 0 :(得分:3)
操作的默认上下文已更改为路由器。如果您希望视图处理操作,您需要像下面这样指定它:
<button {{action testButton target="view"}}>test</button>
以下是您的小提琴的工作版本:http://jsfiddle.net/wtUML/4/
答案 1 :(得分:1)
@buuda钉了它,但如果你想了解更多内容,请参阅动作助手的嵌入式文档:
https://github.com/emberjs/ember.js/blob/master/packages/ember-handlebars/lib/helpers/action.js