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.