redraw()
Opis
Aktualizuje drzewo DOM po zmianie danych w warstwie aplikacji.
NIE musisz wywoływać m.redraw()
, jeśli dane są modyfikowane wewnątrz funkcji obsługi zdarzeń zdefiniowanych w widokach Mithril.js lub po zakończeniu żądania HTTP wykonanego za pomocą m.request
. System autoodświeżania, który bazuje na m.redraw()
, automatycznie obsłuży te przypadki.
MUSISZ wywoływać tę funkcję wewnątrz funkcji zwrotnych setTimeout
/setInterval
/requestAnimationFrame
lub funkcji zwrotnych pochodzących z bibliotek zewnętrznych.
Sygnatura
m.redraw()
Argument | Typ | Wymagany | Opis |
---|---|---|---|
returns | Funkcja nie zwraca żadnej wartości. |
Statyczne składowe
m.redraw.sync
m.redraw.sync()
Argument | Typ | Wymagany | Opis |
---|---|---|---|
returns | Funkcja nie zwraca żadnej wartości. |
Jak to działa
Kiedy funkcje zwrotne spoza ekosystemu Mithril.js są uruchamiane, musisz poinformować silnik renderujący Mithril.js o konieczności odświeżenia widoku. Zewnętrzne funkcje zwrotne mogą obejmować wywołania zwrotne setTimeout
/setInterval
/requestAnimationFrame
, wywołania zwrotne bibliotek WebSocket, procedury obsługi zdarzeń wtyczek jQuery, wywołania zwrotne żądań XHR stron trzecich itp.
Aby wywołać odświeżenie, użyj m.redraw()
. Pamiętaj, że m.redraw
działa tylko wtedy, gdy używasz m.mount
lub m.route
. Jeśli renderowanie odbywa się za pomocą m.render
, powinieneś użyć m.render
do odświeżenia.
m.redraw()
zawsze wywołuje odświeżanie asynchroniczne, podczas gdy m.redraw.sync()
wywołuje odświeżanie synchroniczne. m.redraw()
jest powiązane z window.requestAnimationFrame()
. Zazwyczaj uruchamia się maksymalnie 60 razy na sekundę. Może uruchamiać się częściej, jeśli Twój monitor ma wyższą częstotliwość odświeżania.
m.redraw.sync()
jest przeznaczone głównie do poprawnego odtwarzania wideo w iOS. Działa to tylko w odpowiedzi na zdarzenia wywołane przez użytkownika. Należy jednak pamiętać o kilku ograniczeniach:
- Nie powinieneś wywoływać
m.redraw.sync()
z metod cyklu życia ani z metodyview()
komponentu. Może to prowadzić do nieprzewidywalnych rezultatów (może spowodować błąd). m.redraw.sync()
wywołane z poziomu procedury obsługi zdarzeń może spowodować modyfikację drzewa DOM podczas propagacji zdarzenia (bubbling). W zależności od struktury starych i nowych drzew DOM, zdarzenie może zakończyć fazę propagacji w nowym drzewie i wywołać niepożądane procedury obsługi.- Nie podlega ograniczaniu częstotliwości (ang. throttling). Pojedyncze wywołanie
m.redraw.sync()
powoduje natychmiastowe wywołaniem.render()
dla każdego korzenia zarejestrowanego za pomocąm.mount()
lubm.route()
.
m.redraw()
nie ma żadnego z tych problemów, możesz wywoływać tę funkcję z dowolnego miejsca w kodzie.