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.