redraw()
Описание
Обновляет DOM после изменения данных в приложении.
Вам не нужно вызывать эту функцию, если данные изменяются в контексте обработчика событий, определенного в представлении Mithril.js, или после завершения запроса, выполненного с помощью m.request. Система автоматической перерисовки, основанная на m.redraw(), автоматически позаботится об этом.
Вам нужно вызывать эту функцию в колбэках setTimeout/setInterval/requestAnimationFrame или колбэках сторонних библиотек.
Сигнатура
m.redraw()
| Аргумент | Тип | Обязательный | Описание |
|---|---|---|---|
| returns | Возвращает: ничего |
Статические методы
m.redraw.sync
m.redraw.sync()
| Аргумент | Тип | Обязательный | Описание |
|---|---|---|---|
| returns | Возвращает: ничего |
Как это работает
Если колбэки выполняются вне Mithril.js, необходимо уведомить механизм рендеринга Mithril.js о необходимости перерисовки. Внешние колбэки могут быть колбэками setTimeout/setInterval/requestAnimationFrame, колбэками библиотек для работы с веб-сокетами, обработчиками событий в плагинах jQuery, колбэками сторонних XHR-запросов и т. д.
Чтобы запустить перерисовку, вызовите m.redraw(). Обратите внимание, что m.redraw работает только в том случае, если вы использовали m.mount или m.route. Если вы выполнили рендеринг с помощью m.render, вам следует использовать m.render для перерисовки.
m.redraw() всегда запускает асинхронную перерисовку, в то время как m.redraw.sync() запускает синхронную. m.redraw() привязан к window.requestAnimationFrame(). Таким образом, он обычно вызывается не чаще 60 раз в секунду. Он может работать быстрее, если у вашего монитора более высокая частота обновления.
m.redraw.sync() в основном предназначен для обеспечения корректного воспроизведения видео в iOS. Это поведение работает только в ответ на события, инициированные пользователем. С ним связано несколько ограничений:
- Не следует вызывать
m.redraw.sync()из метода жизненного цикла или методаview()компонента. Это приведет к непредсказуемому поведению и может вызвать ошибку. m.redraw.sync(), вызванный из обработчика событий, может привести к изменению DOM во время всплытия события. В зависимости от структуры старого и нового деревьев DOM, событие может завершить фазу всплытия в новом дереве и вызвать не те обработчики, которые ожидались.- Он не подвергается троттлингу (ограничению частоты вызовов). При каждом вызове
m.redraw.sync()немедленно вызываетсяm.render()для каждого корневого элемента, зарегистрированного черезm.mount()илиm.route().
В отличие от m.redraw.sync(), у m.redraw() нет этих ограничений. Его можно вызывать в любом месте кода.