Si dovrebbe chiamare un ascoltatore di eventi se è allegato dopo che l'evento è già stato attivato? Cosa succede se l'evento verrà attivato una sola volta?
Il primo esempio che viene in mente è l'evento ready
in jQuery. Il seguente frammento, una volta valutato dopo il caricamento della pagina, chiamerà comunque il callback:
$(document).ready(function () {
console.log("Works.");
});
L'alternativa a questo comportamento potrebbe essere un flag che viene impostato quando la pagina viene caricata, costringendo il consumatore dell'API a verificare se l'evento è già accaduto e agire di conseguenza:
if (document.readyState == "complete") {
console.log("Works.");
} else {
$(document).ready(function () {
console.log("Works.");
});
}
Sebbene l'esempio sopra riportato sia nel contesto di un caricamento di una pagina web in cui qualsiasi cosa (di solito) deve accadere dopo che la pagina è stata caricata completamente, gli stessi argomenti potrebbero essere fatti per qualsiasi singolo componente in un'applicazione, che ha " singleton "eventi ( load
, start
, end
, ecc.). Un esempio di un singolo componente potrebbe essere una mappa con un evento load
che viene attivato per specificare che la mappa che è stata caricata :
map.on("load", function () {
console.log("The map has loaded.");
});
L'esempio precedente proviene dall'API ArcGIS per JavaScript, in cui quell'evento viene generato una sola volta e se un utente "attende" che la mappa venga caricata dopo che la mappa è già stata caricata, il listener non verrà mai chiamato. Il risultato desiderato richiede di controllare lo stato della mappa prima che l'ascoltatore sia allegato:
if (map.loaded) {
console.log("The map has loaded.");
} else {
map.on("load", function () {
console.log("The map has loaded.");
});
}
Quale comportamento è corretto, richiedendo al consumatore di verificare se un evento è già stato attivato o chiama sempre il callback?