redraw()
Descrizione
Aggiorna il DOM in seguito a una modifica dei dati dell'applicazione.
NON è necessario chiamare m.redraw()
se i dati vengono modificati all'interno del contesto di esecuzione di un gestore di eventi definito in una view di Mithril.js, o al completamento di una richiesta quando si usa m.request
. Il sistema di autoredraw, basato su m.redraw()
, gestirà automaticamente l'aggiornamento.
È invece necessario chiamare m.redraw()
nelle funzioni di callback di setTimeout
/setInterval
/requestAnimationFrame
, o nelle callback provenienti da librerie di terze parti.
Firma
m.redraw()
Argomento | Tipo | Richiesto | Descrizione |
---|---|---|---|
Restituisce | Non restituisce alcun valore |
Membri statici
m.redraw.sync
m.redraw.sync()
Argomento | Tipo | Richiesto | Descrizione |
---|---|---|---|
Restituisce | Non restituisce alcun valore |
Come funziona
Quando le callback vengono eseguite al di fuori del controllo di Mithril.js, è necessario notificare al motore di rendering di Mithril.js che è richiesto un aggiornamento del DOM (redraw). Esempi di queste callback includono quelle di setTimeout
/setInterval
/requestAnimationFrame
, le funzioni di callback di librerie web socket, i gestori di eventi nei plugin jQuery, le callback di richieste XHR di terze parti, ecc.
Per attivare un redraw, chiama m.redraw()
. Nota che m.redraw
funziona solo se è stato utilizzato m.mount
o m.route
. Se hai renderizzato tramite m.render
, dovresti usare m.render
per eseguire il redraw.
m.redraw()
attiva sempre un redraw asincrono, mentre m.redraw.sync()
attiva un redraw sincrono. m.redraw()
è legato a window.requestAnimationFrame()
. Pertanto, di solito viene attivato al massimo 60 volte al secondo. Potrebbe essere attivato più frequentemente se il tuo monitor ha una frequenza di aggiornamento più alta.
m.redraw.sync()
è principalmente pensato per supportare la riproduzione di video su iOS e funziona solo in risposta a eventi generati dall'utente. Presenta diverse limitazioni:
- Non dovresti chiamare
m.redraw.sync()
da un metodo del ciclo di vita o dal metodoview()
di un componente. In caso contrario, si verificherà un comportamento indefinito (e verrà generato un errore quando possibile). m.redraw.sync()
, se chiamato da un gestore di eventi, può causare la modifica del DOM mentre un evento è in fase di bubbling. A seconda della struttura degli alberi DOM precedenti e successivi, l'evento potrebbe terminare la fase di bubbling nel nuovo albero e attivare gestori indesiderati.- Non è soggetto a throttling. Una chiamata a
m.redraw.sync()
causa immediatamente una chiamata am.render()
per ciascuna root DOM registrata conm.mount()
om.route()
.
m.redraw()
non presenta nessuno di questi problemi e può essere chiamato da qualsiasi punto del codice.