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