Как заставить Мифрил перерисовать без диффузии? (встраивание драгула в мифрил) - PullRequest
0 голосов
/ 11 апреля 2020

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

  • Dragula изменяет порядок элементов li в DOM.
  • Когда вызывается событие Drop, я синхронизирую c модель и вызываю 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>

Trial:

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

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

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

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

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

Фон:

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

    "/ videos": {

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