如何迫使Mithril毫不犹豫地重新绘制?(整合米特里尔的龙)



我正在将一个基于JQuery的应用程序翻译为Mithril。该应用程序使用Dragula允许拖放来重新排序列表。

  • Dragula对DOM中的li元素进行重新排序
  • 当Drop事件被触发时,我同步模型并调用m.redraw()

但是,UI最终处于混合状态:

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

用户在0之前拖动1后,它最终显示为:

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

尝试:

  • m.redraw()m.redraw.sync(),它们正常工作,但如果li被dragula移动,则生成的HTML处于混合状态。

  • 清除CCD_ 6中的CCD_。

  • 清除vmode.dom.textContent

  • 将随机密钥和ID分配给小部件容器和不同的li

。。。没有任何变化,要么我得到一个空白的小部件,要么";数据idx";仍然是错误的。

所以我的问题是,总的来说,是否有可能,以及如何使用这些库来操作mithril小部件内部的html,然后调用m.redraw((,以便mithril重新渲染混乱?

背景:

  • Dragula在oncreate中初始化
  • 我的小部件安装有route:
"/videos": {
onmatch: () => loginWall(true),
render: v => m(layoutWidget, m(videosWidget, v.attrs))
},

这是一篇较旧的文章,但您可能可以提供有关如何在videosWidget中创建组件的更多信息。Mithril通常需要一个键来区分元素,以便在模型列表发生变化时保持当前dom状态,如下所述:键。

相关内容

  • 没有找到相关文章

最新更新