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.