Event Management¶
Il sistema di eventi di MCV si basa su una gestione a livelli dei controller presenti nella pagina il cui controller padre è definito come il Document stesso
Ogni layer di controller può essere determinato sia dalla posizione nel DOM Tree che dalla registrazione programmatica padre-figlio alla creazione del controller
La gerarchia determinata dal sistema definisce che tutti i figli ricevano ogni evento gestito dal padre tramite event bubbling e che se ad un punto del bubbling l’evento venga gestito la propagazione si stoppi
I figli, invece, possono notificare solo il padre diretto attraverso il trigger di un evento che verrà poi propagato ai siblings del controller che ha originato l’evento nel caso in cui il controller padre non lo gestisca
Nota
L’evento non verrà ricevuto dal controller che lo ha originato
Ad ogni evento deve essere assegnato un nome univoco e, opzionalmente, un namespace. Gli handler possono dichiarare gli eventi supportati per nome specifico, per namespace, per regex o per controllo personalizzato
- Quando un evento viene passato ad un handler verrà considerato gestito se l’handler in questione:
Chiamerà
this.consume()
(Vedi EventQueue)Chiamerà
this.consumeImmediate()
Ritornerà
true
Sia stato dichiarato come sink
Ordine chiamata Event Handlers¶
Un handler viene definito alla crezione del controller o da un’estensione e permette di restare in ascolto per un evento
L’ordine di chiamata degli handler è normalmente determinata dal loro ordine di registrazione o, in casi speciali, da parte dello sviluppatore. La propagazione di un evento avviene tra gli handler di uno stesso controller e, successivamente, ai controller successivi
Nota
Se un evento viene dichiarato come consumato utilizzando un qualsiasi metodo che non sia consumeImmediate
la propagazione
tra gli handler dello stesso controller verrà portata a termine
Nota
Se un handler è dichiarato come sink terminerà automaticamente la propagazione dell’evento tramite una chiamata a
consumeImmediate
Importante
Nel caso di un evento di tipo local la chiamata a this.consume()
sarà equivalente ad una chiamata a this.consumeImmediate()
Quando un evento viene propagato a controller figli l’ordine di chiamata è data dall’ordine di registrazione del figlio al padre Il processo di propagazione avverrà in una strategia ramificata isolando ogni ramo
Quando la propagazione viene interrotta in un ramo essa continuerà ad essere eseguita nel ramo successivo