2012-08-03 92 views
1

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

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

回答

3

操作的默认上下文已更改为路由器。如果你想查看处理动作,你需要这样指定它:

<button {{action testButton target="view"}}>test</button> 

这是你拨弄的工作版本:http://jsfiddle.net/wtUML/4/

+0

Thanks!这正是我要找的。 FWIW,我也找到了访问视图属性的方法:只需添加“视图”。在属性名称之前,例如{{view.property}}。 – Tao 2012-08-03 20:40:02

+0

是的,内容的上下文已更改为控制器。很难跟上这些变化。 – buuda 2012-08-03 20:49:22

相关问题