5

I gestori di eventi vanno bene quando si dispone di una vista che fa riferimento a un'altra vista e ne ascolta gli eventi, che sono perfetti per il disaccoppiamento e la riusabilità.Comunicare tra viste progettare modelli con eventi

il problema, però, è a volte ho viste che non fa riferimento in modo da uso aggregatore di evento che è una notifica globale per sapere se è successo qualcosa ... ma che mi sembra giusto quando volevo solo per ascoltare i bambini di vista che non posso riferimento, qualcosa come gli eventi di bubbling nella gerarchia DOM.

ma lasciatemi dire che ho una gerarchia vista come:

  • ParentView
    • ChildView
      • ChildView
        • ModalView

volevo sapere nella ParentView quando il ModalView attiva un evento ... I cant utilizzare bubbling degli eventi, perché il ModalView non si trova nella stessa gerarchia DOM, in modo dovrei usare Event Agregator in questo caso o qualcos'altro? Volevo davvero che la bolla dell'evento potesse adattarsi al mio caso.

risposta

2

Se non è possibile utilizzare la gerarchia del DOM e non si desidera utilizzare un aggregatore di eventi, il mio primo istinto è che è necessario creare la propria gerarchia nelle visualizzazioni.

È possibile dare un'occhiata a backbone.courier per un'idea di come implementare il proprio sistema di bubbling di eventi.

Backbone.courier uses the DOM to detect parent views ma è possibile implementare il proprio metodo per il rilevamento genitori.

Quindi è fattibile senza aggregazione di eventi o DOM, ma penso che finirai per creare e gestire la tua gerarchia. Dato che abbiamo già il DOM, questo odora. Mi farebbe sicuramente una domanda: "devo fare davvero per far scoppiare questo evento?".

Per esempio, la soluzione più semplice potrebbe essere quella di dare la vostra ModalView un riferimento al ParentView e semplicemente chiamare il parentView.listener() quando il vostro anche viene sparato sulla ModalView. Ne hai davvero bisogno per far esplodere i bambini? Questo deve davvero essere disaccoppiato? Può darsi che tu sia troppo restrittivo quando pensi di non avere un riferimento alla tua altra vista.

Queste sono domande che mi chiedo comunque. Anche se può sembrare ovvio potrebbe essere la soluzione migliore:

modalView.container = parentView; 

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

grazie uomo, penso che tu abbia ragione .. nel mio caso la soluzione migliore potrebbe essere presente un ModalView e fa riferimento il chiamante/presentatore che ha senso .. .quando viene eseguito ModalView e viene attivato il relatore, che è la ChildView più profonda e attiva i trigger a bolla per notificare a ParentView – mateusmaso

Problemi correlati