私は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 box
Results
App.EventType.DATA_RECEIVED
私が見つけたグーグルクロージャーでこれを行う唯一の方法は、グローバルパブリックシングルトンインスタンスを作成し、すべてのイベントApp
のソースとして使用するか、すべての子供とサブ子供に配管することです。App.EventType.DATA_RECEIVED
App
これらは両方とも、独自の方法で乱雑で壊れやすいものです。
下向きに泡立つイベントをディスパッチするための閉鎖の簡単な方法はありますか?