2012-10-16 52 views
4

我有一個按鈕視圖,這是我編寫的一套Ember.js窗體幫助器的一部分。例如。 MyAddressFormView有以下模板:我該如何製作通過視圖層次結構進行泡泡的自定義事件?

{{#form}} 
    {{textArea address}} 
    {{submitButton}} 
    {{cancelButton}} 
{{/form}} 

處理「提交」按鈕,我讓「提交」形式的活動提示,並在MyAddressFormView的submit方法處理它。

但是我該怎麼做「取消」按鈕?例如,我有什麼辦法可以在子視圖中觸發一個自定義的「取消表單」事件,讓它冒泡並在祖先視圖中處理它?

+1

莫非這或多或少回答您的需求? http://stackoverflow.com/questions/12815100/action-handlers-not-working-on-view-itself/12817046#12817046 –

+0

它會作爲一個缺口,但我可能最終會用'{{ cancelButton targetBinding =「parentView.parentView」}}'。必須知道父視圖看起來有點反模式。 –

+1

您是否看到我作爲評論放置的其他示例?也許這是一個更好的答案,因爲事件是冒泡的,所以如果你更深入地嵌套一層,代碼不必改變。它在這裏:http://jsfiddle.net/Sly7/xvkgk/22/ –

回答

4

我會建議觸發一個jQuery特殊事件,並在您的Ember應用程序中使用映射註冊事件。例如:

Ember.Application.create({ 
    customEvents: { 
    // key is the jquery event, value is the name used in views 
    formcancel: 'formCancel' 
    } 
}); 

而在你cancelButton觀點:

click: function(evt){ 
    Ember.$().trigger('formcancel') 
} 

以同樣的方式,其他映射灰燼DOM事件做將泡沫。

+0

相關文檔:http ://emberjs.com/guides/understanding-ember/the-view-layer/#toc_adding-new-events – Bluu

+0

什麼是Em?那是'Ember'的別名嗎? – carter

+0

@carter是的。 'Em'是'Ember'的別名。更新我的答案,以免混淆。 –

0

Ember.ActionHandler通過其「目標」屬性冒泡事件。可以重寫Ember.View的目標,讓事件在默認情況下通過parentViews冒泡。

包含此混入第一:

(function() { 
    Ember.View.reopen({ 
     // Let actions bubble to parentView by default. 
     target: function() { 
      return this.get('parentView'); 
     }.property('parentView') 
    }); 
})(); 

然後,只需發送事件就像你通常做:

tap: function() { this.send('someEvent'); } 
+0

默認情況下修補所有視圖是一個非常糟糕的主意 - 你打破了內核視圖如何工作的核心假設,如果這不會讓很多事情中斷,我會感到震驚 – alexspeller

相關問題