2013-05-04 17 views
1

我已經得到了下面的模板如何檢索模型相關聯,查看當點擊事件發生

{{#each photo in photos}} 
    {{#view App.PhotoView}} 
     <img {{bindAttr src="photo.cover_image_source" data-photo-id="photo.id"}} /> 
    {{/view}} 
{{/each}} 
在我的PhotoView

現在,我該如何訪問與之相關的照片模式時,觸發單擊事件?

App.PhotoView = Ember.View.extend({ 
    click: function(event) { 
     // how do I retrieve the model ???? 
    } 
}) 

謝謝!!

回答

1

該模型不會自動傳遞到click函數處理程序中,因此它不能直接在視圖中訪問,但您可以通過使用itemViewClass作爲@BradleyPriest提到的方法或掛鉤到視圖的控制器中以不同方式獲取模型事件。 - 這裏的jsfiddle這表明,概念 - http://jsfiddle.net/intuitivepixel/AywvW/27/

編輯:我已經編輯我的答案匹配的jsfiddle

模板

<script type="text/x-handlebars" data-template-name="index"> 
{{#each photo in photos}} 
    {{#view App.PhotoView contentBinding="photo"}} 
    <a {{action "photoClicked" photo}}> 
     <img {{bindAttr src="photo.cover_image_source"}} /> 
    </a> 
    {{/view}} 
{{/each}} 
</script> 

查看

App.PhotoView = Ember.View.extend({ 
    content: null 
}); 

控制器

App.IndexController = Ember.ArrayController.extend({ 
    photoClicked: function(event) { 
    alert(event.title); 
    } 
}); 

希望它有助於

+0

感謝。這就是爲什麼我把數據照片ID attr。我希望它有點像Backbone和Backbone Marionette。使它更容易。 – user1732055 2013-05-04 22:37:06

+0

通常情況下,您會以完全不同的方式執行此操作,將圖像包裹在{{action}}幫助程序中,以便您可以將模型傳遞給要調用的函數... – intuitivepixel 2013-05-04 22:40:26

+0

有一個嘗試,我更新了我的回答... – intuitivepixel 2013-05-04 22:51:57

2

這其實可以用itemViewClass更少的代碼來實現的。

{{#each photos itemViewClass="App.PhotoView"}} 
    <img {{bindAttr src="cover_image_source"}} /> 
{{/each}} 

每個視圖自動將上下文設置爲照片數組中的項目。

App.PhotoView = Ember.View.extend({ 
    click: function(event) { 
    var photo = this.get("context"); 
    } 
}) 
相關問題