Как заставить Мифрил перерисовывать без различий? (интеграция драгулы в Mithril)

Я перевожу приложение на основе JQuery на Mithril. Это приложение использует Dragula, чтобы разрешить перетаскивание для изменения порядка списков.

  • Dragula переупорядочивает li элементы в DOM.
  • Когда запускается событие Drop, я синхронизирую модель и вызываю m.redraw ().

Однако пользовательский интерфейс оказывается в смешанном состоянии:

<li data-idx="0"> The Zero </li>
<li data-idx="1"> The One </li>

и после того, как пользователь перетащил 1 до 0, это закончится как:

<li data-idx="1"> The One</li>
<li data-idx="0"> The Zero</li>

Пытался:

  • m.redraw (), m.redraw.sync (), они работают правильно, но если т.е. LI перемещаются перетаскиванием, тогда результирующий HTML находится в смешанном состоянии.

  • очищая dom в vnode с надеждой, что он будет воссоздан.

  • очистка vmode.dom.textContent
  • Назначьте случайные ключи и идентификаторы контейнеру виджета и различным LI

... И ничего не меняется, либо я получаю пустой виджет, либо значения в "data-idx" по-прежнему неверны.

Итак, мой вопрос, в общем, возможно ли и как использовать такие библиотеки, которые управляют внутренним html мифрилового виджета, а затем вызывают m.redraw (), чтобы мифрил повторно отображал беспорядок?

Задний план:

  • Драгула инициализируется в oncreate
  • Мои виджеты монтируются с маршрутом:

    "/видео": {

        onmatch: () => loginWall(true),
        render: v => m(layoutWidget, m(videosWidget, v.attrs))
    },
    

person rupps    schedule 11.04.2020    source источник


Ответы (1)


Это более старый пост, но, возможно, вы могли бы предоставить больше информации о том, как создаются компоненты в videosWidget. Mithril обычно требуется ключ, чтобы различать элементы, чтобы текущее состояние dom сохранялось при изменении списка моделей, как описано здесь: ключи.

person Ian Wilson    schedule 27.05.2020