我的工作在谷歌關閉一個Web應用程序,其中的結構是這樣的:關閉事件冒泡
App
+ Control Pane
| + Search Box
| + Search Button
+ Result Pane
+ Results
+ Next Page Link
實際的元件結構是一個相當複雜一點。重要的一點是,組件樹中有許多不同的組件可以啓動某些操作。在這個例子中,輸入Search Box
,按Search Button
,或擊中Next Page
都需要查詢。
這很容易處理。所有子組件樹中任何地方都可以做
this.dispatchEvent(App.EventType.ACTION, ...)
App
就能當事件向上傳播到收聽。問題是另一個方向:當App
從其查詢中接收數據時,它必須將其推送給所有的孩子。
App
似乎非常脆弱,試圖直接推送到Search box
和Results
,因爲它們在組件樹中的位置可能會更改。我想要做的是發起一個App.EventType.DATA_RECEIVED
事件,並讓所有的孩子(和子孩子等)聽到它。
爲此在谷歌關閉,我已經能夠找到的唯一方法是使全球公共單一實例的App
和源用於所有App.EventType.DATA_RECEIVED
事件,或者通過向所有兒童下探App
和subchildren。
這兩個都是他們自己的方式混亂和脆弱。
在閉包中有一種簡單的方法來調度向下冒泡的事件嗎?
這聽起來更像是一個設計決定給我。我假設你想讓應用的其餘部分可用的數據是模型的一部分,那麼爲什麼你不要將單個組件綁定到聽他們感興趣的模型的位,並解析數據得到它並有模型調度更改事件。 ala綁定。 – lennel