5

イベントハンドラは、別のビューを参照し、そのイベントをリッスンするビューを持つときに問題ありません。デカップリングと再利用に最適です。ビューとデザインパターンの間の通信

問題が発生するかどうかを知るためにグローバルアトリビュートのイベントアグリゲータを使用するため、時々私は参照されないビューを持っていますが、私はちょうど私が傾けるDOM階層のバブリングイベントのようなものです。

が、私は次のように私はビュー階層を持っているとしましょう:

  • ParentView
    • ChildView
      • ChildView
        • ModalView

私はModalViewがイベントをトリガしたときにParentViewに知りたいと思ったModalViewはそう、同じDOM階層ではないので...私はバブリングイベントを使用カントこの場合、イベントアグレゲーターを使用するのはどうでしょうか?イベントのバブルが私のケースに合っていると本当に欲しかった。

答えて

2

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

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

Backbone.courier uses the DOM to detect parent viewsただし、親の検出に独自の方法を実装できます。

イベントアグリゲーションやDOMがないと実行できますが、自分の階層を作成して管理することになります。 私たちはすでにDOMを持っているので、これは匂いがする。それは確かに私に質問するだろう: "私は本当にはこのイベントをバブリングする必要がありますか?"ご例えば

、最も簡単な解決策は、あなたのModalViewParentViewへの参照を与え、あなたがさえModalViewに発射されたときに、単にparentView.listener()を呼び出すことかもしれません。あなたは本当にそれが子供の中に泡立つように必要ですか?これは実際に切り離される必要がありますか?あなたが他のビューへの参照を持っていないと仮定すると、あなたはあまりにも制限的であるかもしれません。

これは私がどうしても自分に尋ねる質問です。それは明らかに思えるかもしれないが、それが最善の解決策になるかもしれません:

modalView.container = parentView; 

modalView.myEventHandler = function(e) { 
    this.container.myEventHandler(e); 
} 
+0

感謝の男、私はあなたが...私の場合には最善の解決策はModalView存在するかもしれない権利であり、理にかなって、発信者/プレゼンターを参照すると思います。.. 。ModalViewが終了し、トリガーするとプレゼンターが呼び出され、最も深いChildViewが呼び出され、ParentViewに通知するためにバブルがトリガーされます – mateusmaso

関連する問題