如何实现支持拖拽编辑的多层嵌套dataview
多层嵌套Dataview实现方案
你当前遇到的内层Dataview消失问题,核心原因是外层Dataview实现方案
你当前遇到的内层Dataview消失问题,核心原因是外层Dataview数据更新触发条目重绘时,会直接替换条目DOM节点,手动挂载的内层实例对应节点会被销毁。可按以下方案调整:
- 在外层Dataview的条目模板(tpl)中,预先为需要内嵌内层Dataview的条目预留固定标识的占位容器,比如添加
class="inner-dataview-wrap"的空div,不需要后续手动插入容器节点。 - 监听外层Dataview的条目渲染完成事件(不同框架对应事件名可能为
itemrender/itemupdate事件,每次条目渲染完成后再处理内层Dataview的挂载逻辑。 - 建立内层Dataview实例缓存池,以对应外层条目ID为key存储已创建的内层实例,外层条目重绘后不需要重新创建实例,只需要将已有实例渲染到对应新的预留容器即可,避免重复创建实例导致的性能问题,也能保留内层的拖拽状态、编辑状态不丢失。
- 内层Dataview的store数据与外层条目的附加数据做绑定,外层条目数据更新时仅同步内层store的数据,不需要重建内层实例。
- 如果需要支持更深层级嵌套,每一级Dataview的条目模板都按同样逻辑预留子级占位容器,监听当前层级的条目渲染完成事件后挂载下一级实例,逐层实现无限层级嵌套。
- 为每个层级的Dataview配置独立的拖拽分组标识,避免跨层级拖拽冲突,保证各层级拖拽重排操作互不影响。
内容的提问来源于stack exchange,提问作者Arno Voerman
相关产品推荐
相关产品推荐

