5

programy do obsługi zdarzeń są dobre, gdy masz widok, który odwołuje się do innego widoku i słucha jego zdarzeń, co jest idealne do oddzielenia i ponownego wykorzystania.Komunikacja między widokami wzorców projektowych a zdarzeniami

problem, chociaż czasami mam widoki, do których nie ma odniesienia, więc używam Agregatora zdarzeń, który jest globalnym powiadomieniem, aby wiedzieć, czy coś się stało ... ale wydaje mi się, że nie jest to właściwe, gdy chcę tylko posłuchać opinii dzieci, których nie mogę odwołanie, coś w rodzaju bąbelków w hierarchii DOM.

ale pozwól mi powiedzieć, że mam hierarchię widok jak:

  • ParentView
    • ChildView
      • ChildView
        • ModalView

chciałem wiedzieć w ParentView gdy ModalView wyzwala zdarzenie ... Nie mogę użyć zdarzenie propagacji ponieważ ModalView nie jest w tej samej hierarchii DOM, więc czy powinienem użyć Agregatora wydarzeń w tym przypadku lub czegoś innego? Naprawdę chciałem, żeby ta bańka zdarzeń pasowała w moim przypadku.

Odpowiedz

2

Jeśli nie możesz użyć hierarchii DOM i nie chcesz używać agregatora zdarzeń, moim pierwszym instynktem jest to, że musisz zbudować własną hierarchię w swoich widokach.

Możesz zobaczyć backbone.courier, aby dowiedzieć się, jak zaimplementować własny system propagacji zdarzeń.

Backbone.courier uses the DOM to detect parent views ale można zaimplementować własną metodę wykrywania rodzica.

Jest to możliwe bez agregacji zdarzeń lub DOM, ale myślę, że w efekcie stworzysz i zarządzasz swoją własną hierarchią. Ponieważ mamy już DOM, to pachnie. Z pewnością sprawiłoby, żebym zadał pytanie: "czy muszę naprawdę potrzebuję sfałszować to wydarzenie?".

Dla przykładu, najprostszym rozwiązaniem mogłoby być dać ModalView odniesienie do ParentView i po prostu zadzwonić do parentView.listener() kiedy wasz nawet wypala na ModalView. Czy naprawdę potrzebujesz bańki przez dzieci? Czy to naprawdę wymaga oddzielenia? Możliwe, że jesteś zbyt restrykcyjny, zakładając, że nie masz odniesienia do innego widoku.

To są pytania, które i tak zadaję sobie. Choć może się to wydawać oczywiste, to może być najlepszym rozwiązaniem:

modalView.container = parentView; 

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

dzięki człowiek, myślę, że masz rację .. w moim przypadku najlepszym rozwiązaniem może być prezentują ModalView i odwoływać się do rozmówcy/prezentera, który ma sens .. .kiedy ModalView jest gotowy i wywołuje prezentera, który jest najgłębszy ChildView i bańka uruchamia powiadomienie ParentView – mateusmaso

Powiązane problemy