redraw()
Popis
Aktualizuje DOM po změně dat v aplikační vrstvě.
Není nutné volat tuto funkci, pokud jsou data modifikována v kontextu obslužné rutiny události definované v pohledu Mithril.js. Stejně tak není nutné ji volat po dokončení požadavku při použití m.request
. O toto se stará systém autoredraw, který je postaven na m.redraw()
.
JE nutné ji volat v callbackech setTimeout
/setInterval
/requestAnimationFrame
nebo z knihoven třetích stran, které nemají integraci s Mithril.js.
Signatura
m.redraw()
Argument | Typ | Povinný | Popis |
---|---|---|---|
returns | Nevrací žádnou hodnotu. |
Statické členy
m.redraw.sync
m.redraw.sync()
Argument | Typ | Povinný | Popis |
---|---|---|---|
returns | Nevrací žádnou hodnotu. |
Jak to funguje
Pokud se callbacky spouštějí mimo kontrolu Mithril.js, je nutné upozornit vykreslovací engine Mithril.js, že je potřeba provést překreslení. Mezi externí callbacky patří například setTimeout
/setInterval
/requestAnimationFrame
, knihovny web socketů, obslužné rutiny událostí v pluginech jQuery, požadavky XHR třetích stran atd.
Pro spuštění překreslení zavolejte m.redraw()
. Upozorňujeme, že m.redraw
funguje pouze v případě, že jste použili m.mount
nebo m.route
. Pokud jste renderovali pomocí m.render
, měli byste pro překreslení použít m.render
.
m.redraw()
vždy spouští asynchronní překreslení, zatímco m.redraw.sync()
spouští synchronní překreslení. m.redraw()
je svázán s window.requestAnimationFrame()
. Proto se typicky spouští maximálně 60krát za sekundu. Může se spouštět i rychleji, pokud má váš monitor vyšší obnovovací frekvenci.
m.redraw.sync()
je určen především pro zajištění správného přehrávání videí v iOS. Funguje pouze v reakci na události spuštěné uživatelem. Použití této metody s sebou nese několik upozornění:
- Neměli byste volat
m.redraw.sync()
z metody životního cyklu nebo metodyview()
komponenty. Pokud tak učiníte, povede to k nedefinovanému chování (v ideálním případě dojde k vyhození chyby). m.redraw.sync()
volané z obslužné rutiny události může způsobit úpravu DOM během šíření události. V závislosti na struktuře starých a nových stromů DOM může událost dokončit fázi šíření v novém stromu a aktivovat nežádoucí obslužné rutiny.- Není omezen počet volání. Jedno volání
m.redraw.sync()
způsobí okamžité voláním.render()
pro každý kořen registrovaný pomocím.mount()
nebom.route()
.
m.redraw()
nemá žádný z těchto problémů a můžete jej volat odkudkoli.