2012-10-23 71 views
3

在下面的代碼中,我的點擊事件代表和所有三個'點擊'我的視圖層次結構中的處理程序被激發。事件代表團目標

但是,我也想在我的整個視圖層次結構中激發'編輯''編輯'僅僅是我的'孩子'視圖中元素的目標。

模板

<script type="text/x-handlebars"> 
    {{#view App.GrandparentView}} 
    {{#view App.ParentView}} 
     {{#view App.ChildView}} 
      <span {{action "edit" target="view"}}>Click Me</span> 
     {{/view}}  
    {{/view}} 
    {{/view}} 
</script> 

的JavaScript

App.GrandparentView = Ember.View.extend({ 
    click: function() { 
    console.log('Grandparent Click Fired!'); 
    }, 
    edit: function() { 
    console.log('GrandParent edit fired');   
    } 
}); 
App.ParentView = Ember.View.extend({ 
    click: function() { 
    console.log('Parent Click Fired!'); 
    }, 
    edit: function() { 
    console.log('Parent edit fired');   
    } 

}); 
App.ChildView = Ember.View.extend({ 
    click: function() { 
    console.log('Child Click Fired!'); 
    }, 
    edit: function() { 
    console.log('Child edit fired');   
    } 

});​ 

有沒有辦法來委派在視圖層次結構的目標處理程序?我想做的事是這樣的:

App.ChildView = Ember.View.extend({ 
    click: function() { 
    console.log('Child Click Fired!'); 
    }, 
    edit: function() { 
    console.log('Child edit fired');   
    this.get('parentView').edit(); //DO NOT WANT TO DO THIS. 
    } 
});​ 

這裏是一個jsFiddle爲例進行測試。

+0

如果您提供一個JSFiddle,請提供一個實際運行的JSFiddle。提供小提琴的目的不僅僅是看代碼,它實際上是在玩弄它。如果我不得不在小提琴內部設置Ember,它就會失敗。 –

+1

絕對,我的不好。關鍵是始終提供一個工作的jsFiddle。我自己玩小提琴。出於某種奇怪的原因,資源被刪除。我現在更新了它。 – Rajat

回答

2

它看起來像你一週前發佈的同一個問題。據我所見,這種功能並未在燼中實現。該事件傳播到視圖層次結構,但操作名稱丟失,並且觸發了默認的處理程序。

我發現的唯一的解決方法是重新打開Ember.View類本身,並重寫單擊處理程序是這樣的:

Ember.View.reopen({ 
    click: function(event){ 
    if(event.view !== this && this[event.actionName]){ 
     return this[event.actionName](event); 
    } 
    } 
}) 

在這裏看到的小提琴:

http://jsfiddle.net/Sly7/zZyCS/

+0

我看到你在這裏做了什麼。我期待這一點得到支持。 – Rajat

+0

任何想法是否應該由Ember自然支持? @ sly7_7 – Rajat

+1

請參閱@joliss的評論:http://stackoverflow.com/questions/12918112/how-can-i-make-custom-events-that-bubble-through-the-view-hierarchy#comment17706531_12918112 –