使用路由时如何访问视图属性和操作处理程序?

时间:2012-08-03 19:35:57

标签: ember.js

当我在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');                
    }
});

有没有办法让我的动作处理程序保存在相关的视图类中?我错过了什么吗?

2 个答案:

答案 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