redraw()
Leírás
Frissíti a DOM-ot az alkalmazás adatszintjében bekövetkezett változások után.
Általában nem szükséges meghívnod, ha az adatokat egy Mithril.js nézetben definiált eseménykezelő végrehajtási környezetében módosítod, vagy a m.request
használatával a kérés befejezte után. Az autoredraw rendszer, amely a m.redraw()
-ra épül, automatikusan gondoskodik erről.
Akkor kell meghívnod a setTimeout
/setInterval
/requestAnimationFrame
visszahívásaiban, illetve harmadik féltől származó könyvtárak visszahívásaiban, ha az adatok változása nem a Mithril.js által kezelt környezetben történik.
Szignatúra
m.redraw()
Paraméter | Típus | Kötelező | Leírás |
---|---|---|---|
returns | Nincs visszatérési értéke. |
Statikus tagok
m.redraw.sync
m.redraw.sync()
Paraméter | Típus | Kötelező | Leírás |
---|---|---|---|
returns | Nincs visszatérési értéke. |
Hogyan működik
Amikor a Mithril.js által nem kezelt visszahívások futnak, értesítened kell a Mithril.js renderelő motorját, hogy szükség van az újrarajzolásra. Ilyen külső visszahívások lehetnek a setTimeout
/setInterval
/requestAnimationFrame
visszahívásai, web socket könyvtárak visszahívásai, jQuery bővítmények eseménykezelői, harmadik féltől származó XHR kérések visszahívásai stb.
Az újrarajzolás elindításához hívd a m.redraw()
függvényt. Fontos, hogy a m.redraw
csak akkor működik, ha a m.mount
vagy a m.route
függvényt használtad. Ha a m.render
segítségével rendereltél, akkor a m.render
függvényt kell használnod az újrarajzoláshoz.
A m.redraw()
mindig aszinkron újrarajzolást indít, míg a m.redraw.sync()
szinkron újrarajzolást. A m.redraw()
a window.requestAnimationFrame()
-hez van kötve, ezért általában másodpercenként legfeljebb 60-szor fut le. Gyorsabban is futhat, ha a képernyőd magasabb frissítési gyakoriságú.
A m.redraw.sync()
elsősorban arra szolgál, hogy a videók lejátszása működjön iOS-en. Ez csak felhasználó által kiváltott eseményekre működik, és számos figyelmeztetéssel jár:
- Tilos meghívnod a
m.redraw.sync()
függvényt egy életciklus metódusból vagy egy komponensview()
metódusából. Ennek következményeként definiálatlan viselkedés léphet fel (ha lehetséges, hibát dob). - Az eseménykezelőből meghívott
m.redraw.sync()
a DOM módosulását okozhatja, miközben egy esemény buborékozik. A régi és új DOM fák szerkezetétől függően az esemény befejezheti a buborékolási fázist az új fában, és nem szándékolt kezelőket aktiválhat. - Nincs szabályozás. A
m.redraw.sync()
egyetlen hívása azonnal egym.render()
hívást eredményez am.mount()
vagym.route()
segítségével regisztrált gyökérelemre.
A m.redraw()
-nak nincsenek ilyen problémái, bárhonnan meghívhatod.