redraw()
Beschreibung
Aktualisiert das DOM, nachdem Änderungen in der Anwendungsschicht vorgenommen wurden.
Ein Aufruf ist in der Regel nicht erforderlich, wenn Daten innerhalb des Ausführungskontexts eines Ereignishandlers, der in einer Mithril.js-View definiert ist, oder nach Abschluss einer Anfrage bei Verwendung von m.request
geändert werden. Das Autoredraw System, das auf m.redraw()
basiert, übernimmt dies automatisch.
Ein Aufruf ist jedoch erforderlich in setTimeout
/setInterval
/requestAnimationFrame
-Callbacks oder in Callbacks von Drittanbieter-Bibliotheken.
Signatur
m.redraw()
Argument | Typ | Erforderlich | Beschreibung |
---|---|---|---|
returns | Kein Rückgabewert |
Statische Elemente
m.redraw.sync
m.redraw.sync()
Argument | Typ | Erforderlich | Beschreibung |
---|---|---|---|
returns | Kein Rückgabewert |
Funktionsweise
Wenn Callbacks außerhalb von Mithril.js ausgeführt werden, muss die Rendering-Engine von Mithril.js benachrichtigt werden, dass ein Redraw erforderlich ist. Solche externen Callbacks können beispielsweise setTimeout
/setInterval
/requestAnimationFrame
-Callbacks, Callbacks von Websocket-Bibliotheken, Event-Handler in jQuery-Plugins oder XHR-Request-Callbacks von Drittanbietern sein.
Um einen Redraw auszulösen, rufen Sie m.redraw()
auf. Beachten Sie, dass m.redraw()
nur funktioniert, wenn Sie m.mount
oder m.route
verwendet haben. Wenn Sie mit m.render
gerendert haben, sollten Sie m.render
verwenden, um neu zu rendern.
m.redraw()
löst immer asynchrone Neuzeichnungen aus, während m.redraw.sync()
eine synchrone Neuzeichnung auslöst. m.redraw()
ist an window.requestAnimationFrame()
gebunden und wird daher typischerweise bis zu 60 Mal pro Sekunde ausgelöst. Es kann schneller ausgelöst werden, wenn Ihr Monitor eine höhere Aktualisierungsrate unterstützt.
m.redraw.sync()
ist hauptsächlich dafür gedacht, die Videowiedergabe unter iOS zu ermöglichen. Dies funktioniert nur als Reaktion auf benutzergesteuerte Ereignisse. Es gibt einige Einschränkungen:
- Sie sollten
m.redraw.sync()
nicht innerhalb einer Lifecycle-Methode oder derview()
-Methode einer Komponente aufrufen. Dies führt zu undefiniertem Verhalten (und löst, wenn möglich, einen Fehler aus). m.redraw.sync()
, das von einem Eventhandler aufgerufen wird, kann dazu führen, dass das DOM verändert wird, während ein Ereignis "bubbled". Abhängig von der Struktur der alten und neuen DOM-Bäume kann das Ereignis die Bubbling-Phase im neuen Baum beenden und unerwünschte Handler auslösen.- Es findet keine Drosselung statt. Ein Aufruf von
m.redraw.sync()
löst sofort einenm.render()
-Aufruf für jeden mitm.mount()
oderm.route()
registrierten Root aus.
m.redraw()
hat keines dieser Probleme; Sie können es von überall aus aufrufen.