私はGoogleクロージャーのウェブアプリに取り組んでおり、構造は次のようになっています。
App
  + Control Pane
  |  + Search Box
  |  + Search Button
  + Result Pane
     + Results
     + Next Page Link
実際のコンポーネント構造はかなり複雑です。重要な点は、コンポーネントツリー全体に、特定のアクションを開始できるさまざまなコンポーネントが存在することです。この例では、Enterキーを押す、Search Boxを押すSearch Button、またはNext Pageすべてを押すには、クエリを実行する必要があります。
これは処理するのに十分簡単です。コンポーネントツリーのどこにいても、どの子でも実行できます
this.dispatchEvent(App.EventType.ACTION, ...)
Appイベントが上向きに伝播するときにそれを聞くことができます。問題は別の方向です。Appクエリからデータを受信すると、すべての子にデータをプッシュする必要があります。
コンポーネントツリー内の位置は変更される可能性があるため、およびにApp直接プッシュしようとするのは非常に脆弱なようです。私がやりたいのは、イベントを開催し、すべての子供たち(およびサブ子供たちなど)にそれを聞いてもらうことです。Search boxResultsApp.EventType.DATA_RECEIVED
私が見つけたグーグルクロージャーでこれを行う唯一の方法は、グローバルパブリックシングルトンインスタンスを作成し、すべてのイベントAppのソースとして使用するか、すべての子供とサブ子供に配管することです。App.EventType.DATA_RECEIVEDApp
これらは両方とも、独自の方法で乱雑で壊れやすいものです。
下向きに泡立つイベントをディスパッチするための閉鎖の簡単な方法はありますか?