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.