redraw()
Descripción
Actualiza el DOM después de una modificación en la capa de datos de la aplicación.
No es necesario invocarlo si los datos se modifican dentro del contexto de ejecución de un manejador de eventos definido en una vista de Mithril.js, o tras la finalización de una solicitud cuando se usa m.request
. El sistema de autoredraw, que se basa en m.redraw()
, se encarga automáticamente de esto.
Sí es necesario invocarlo en las funciones callback de setTimeout
/setInterval
/requestAnimationFrame
, o en las funciones callback de bibliotecas externas.
Firma
m.redraw()
Argumento | Tipo | Requerido | Descripción |
---|---|---|---|
returns | No retorna nada |
Miembros estáticos
m.redraw.sync
m.redraw.sync()
Argumento | Tipo | Requerido | Descripción |
---|---|---|---|
returns | No retorna nada |
Cómo funciona
Cuando se ejecutan funciones callback externas a Mithril.js, es necesario notificar al motor de renderizado de Mithril.js que se requiere un redibujo. Las funciones callback externas pueden ser funciones callback de setTimeout
/setInterval
/requestAnimationFrame
, funciones callback de bibliotecas de WebSocket, manejadores de eventos en plugins de jQuery, funciones callback de solicitudes XHR de terceros, etc.
Para activar un redibujo, invoca m.redraw()
. Ten en cuenta que m.redraw
solo funciona si has utilizado m.mount
o m.route
. Si has renderizado a través de m.render
, debes usar m.render
para redibujar.
m.redraw()
siempre activa redibujos asíncronos, mientras que m.redraw.sync()
activa uno síncrono. m.redraw()
está vinculado a window.requestAnimationFrame()
. Por lo tanto, normalmente se ejecutará como máximo 60 veces por segundo. Puede ocurrir más rápido si tu monitor tiene una frecuencia de actualización mayor.
m.redraw.sync()
está destinado principalmente a permitir que la reproducción de vídeos funcione en iOS. Esto solo funciona en respuesta a eventos iniciados por el usuario. Conlleva varias advertencias:
- No debes invocar
m.redraw.sync()
desde un método de ciclo de vida o el métodoview()
de un componente. Hacerlo puede resultar en un comportamiento indefinido (se genera un error cuando sea posible). m.redraw.sync()
invocado desde un manejador de eventos puede provocar modificaciones en el DOM mientras un evento se está propagando. Dependiendo de la estructura de los árboles DOM antiguo y nuevo, el evento puede terminar la fase de propagación en el nuevo árbol y activar manejadores no deseados.- No está regulado en su frecuencia. Una invocación de
m.redraw.sync()
causa inmediatamente una invocación dem.render()
por cada nodo raíz registrado conm.mount()
om.route()
.
m.redraw()
no tiene ninguno de esos problemas, puedes invocarlo desde cualquier lugar.