我正在将一个基于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状态,如下所述:键。