5

別のビューを参照してそのイベントをリッスンするビューがある場合、イベントハンドラーは問題ありません。これは、デカップリングと再利用に最適です。

問題は、参照されていないビューがある場合があるため、何かが発生したかどうかを知るためのグローバル通知であるEvent Aggregatorを使用することです...しかし、参照できない子ビューを聞きたいだけの場合は、正しくないようです。 DOM階層内のバブリングイベント。

しかし、私には次のようなビュー階層があると言わせてください。

  • ParentView
    • ChildView
      • ChildView
        • ModalView

ModalViewがイベントをトリガーするタイミングをParentViewで知りたいのですが...ModalViewが同じDOM階層にないため、イベントバブリング使用できません。この場合、イベントアグリゲーターを使用する必要がありますか?私の場合、イベントバブルが収まるようにしたかったのです。

4

1 に答える 1

2

DOMの階層を使用できず、イベントアグリゲーターを使用したくない場合、私の最初の本能は、ビューに独自の階層を構築する必要があるということです。

独自のイベントバブリングシステムを実装する方法については、backbone.courierをご覧ください

Backbone.courierはDOMを使用して親ビューを検出しますが、親を検出するための独自のメソッドを実装できます。

したがって、イベントの集約やDOMがなくても実行できますが、最終的には独自の階層を作成して管理することになります。すでにDOMを持っているので、これはにおいがします。それは確かに私に疑問を投げかけるでしょう:「私は本当にこのイベントをバブルする必要がありますか?」。

あなたの例では、最も簡単な解決策は、ModalViewにParentViewへの参照を与え、ModalView偶数が起動されたときに単に呼び出すことです。あなたは本当に子供たちを泡立たせるためにそれが必要ですか?これは本当に切り離す必要がありますか?他のビューへの参照がないと想定すると、制限が厳しすぎる可能性があります。parentView.listener()

とにかく自分に問いかける質問です。当たり前のように見えるかもしれませんが、それが最善の解決策かもしれません。

modalView.container = parentView;

modalView.myEventHandler = function(e) {
    this.container.myEventHandler(e);
}
于 2013-03-03T01:20:23.983 に答える