redraw()
Description
Met à jour le DOM suite à une modification des données de l'application.
Il n'est généralement pas nécessaire d'appeler m.redraw()
si les données sont modifiées dans le contexte d'un gestionnaire d'événements défini dans une vue Mithril.js, ou après la complétion d'une requête effectuée avec m.request
. Le mécanisme de redessin automatique, basé sur m.redraw()
, gère ces cas.
Il est impératif d'appeler m.redraw()
dans les callbacks de setTimeout
, setInterval
ou requestAnimationFrame
, ainsi que dans les callbacks de bibliothèques tierces.
Signature
m.redraw()
Argument | Type | Requis | Description |
---|---|---|---|
returns | Ne renvoie rien |
Membres statiques
m.redraw.sync
m.redraw.sync()
Argument | Type | Requis | Description |
---|---|---|---|
returns | Ne renvoie rien |
Fonctionnement
Lorsque des callbacks s'exécutent en dehors du contexte de Mithril.js, il est nécessaire de notifier le moteur de rendu de Mithril.js qu'un rafraîchissement est requis. Ces callbacks externes peuvent inclure ceux de setTimeout
, setInterval
, requestAnimationFrame
, des bibliothèques de sockets web, des gestionnaires d'événements de plugins jQuery, des requêtes XHR tierces, etc.
Pour déclencher un redessin, appelez m.redraw()
. Notez que m.redraw()
ne fonctionne que si vous avez utilisé m.mount()
ou m.route()
. Si vous avez rendu votre application via m.render
, vous devez utiliser m.render
pour effectuer le redessin.
m.redraw()
déclenche toujours des redessins asynchrones, tandis que m.redraw.sync()
déclenche un redessin synchrone. m.redraw()
est lié à window.requestAnimationFrame()
. Il s'exécutera donc généralement jusqu'à 60 fois par seconde, voire plus rapidement si votre moniteur a un taux de rafraîchissement supérieur.
m.redraw.sync()
est principalement destiné à assurer la lecture de vidéos sous iOS, et uniquement suite à des événements déclenchés par l'utilisateur. Son utilisation comporte plusieurs limitations importantes :
- Il ne faut pas appeler
m.redraw.sync()
depuis une méthode de cycle de vie ou la méthodeview()
d'un composant. Cela entraînera un comportement indéfini (une erreur sera levée lorsque cela est possible). - L'appel de
m.redraw.sync()
depuis un gestionnaire d'événements peut entraîner la modification du DOM pendant la propagation de l'événement. Selon la structure des anciens et nouveaux arbres DOM, l'événement peut terminer sa phase de propagation dans le nouvel arbre et déclencher des gestionnaires d'événements indésirables. - Il n'est pas limité. Un appel à
m.redraw.sync()
provoque immédiatement un appel àm.render()
pour chaque racine enregistrée avecm.mount()
oum.route()
.
m.redraw()
ne présente aucun de ces problèmes et peut être appelé où vous le souhaitez.