Sto lavorando allo sviluppo di un'applicazione tela HTML, in cui devo essere in grado di eseguire il mio processo di elaborazione dell'interfaccia utente. Ecco da dove viene la radice di questa domanda, ma mi piacerebbe davvero capire come funziona l'intero processo.
Sono riuscito a scoprire che in genere gli eventi acquisiscono o tunnel città, e quindi rimbalzare, ma questo è il massimo che sono riuscito a ottenere .
Nota: ho familiarità con il pattern Observer, non è quello che chiedo per il 2 e il 5.
Quindi, sto cercando il modo corretto per:
- Invia l'evento al figlio corretto
- Chiama gli abbonati all'evento, se esistono
- Interrompe l'elaborazione quando è appropriato
- Bubbling di nuovo al chiamante
- Chiamando gli abbonati all'evento bolla, se esistono.
Per il numero 1, quello che ho trovato sembra un po 'rudimentale. C'è un modo migliore?
for child in children
if child.containsPoint(x, y)
// Do stuff
Per il n. 2, capisco come funzionano gli osservatori e gli abbonati, ma come faccio a distinguere tra il tunneling e chiamare un gestore se ne è stato sottoscritto uno. Perché, potrei avere un elemento genitore che non fa nulla con dire, l'evento move del mouse, ma deve ancora inviarlo al figlio sotto di esso, se ce n'è uno.
Per il n. 3, l'ho visto spesso dove i dati dell'evento hanno una proprietà Handled
. Tuttavia, come ottengo se è stato gestito. Se ci sono molti abbonati a un evento, vengono chiamati uno per uno, e ogni volta che la proprietà Handled
è spuntata, e se torna vera, allora smetti di ciclare? Inoltre, dovrei tornare in bolla se un evento del tunnel gestisce qualcosa?
Per il # 4, in genere esiste una proprietà o un parametro che specifica l'oggetto di origine. Quindi, se tunnel da A - > B - > C, quindi C è ciò che è contenuto in quella proprietà. Quindi, quando sono a B, ottenendo la bolla di C, come faccio a sapere di richiamare A?
Per il n. 5, questo è praticamente lo stesso di # 2, è proprio qui nel caso sia diverso.
Spero davvero che ci siano alcuni schemi che definiscono come fare tutto questo bene, ma a quanto pare le mie competenze su Google non erano all'altezza della possibilità di trovarli se ci sono.