2012-08-03 35 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

相關問題