如何重新加载已初始化的Fancytree?2.38.3版本兼容问题求助
Fancytree 2.38.3 重新加载已初始化组件报错处理
环境信息
- Fancytree 版本:2.38.3
- jQuery 版本:3.7.1
- 需求:重新加载树组件,同时清除选中高亮状态,组件支持标题/编号搜索
旧版本(2.31.0之前)可行实现
之前通过销毁组件后重新初始化完成重载:
$("#tree").fancytree("destroy"); pageTree();
初始化函数定义:
window.pageTree = function() { $("#tree").fancytree({...options}); };
升级后报错情况
升级到2.38.3后,执行上述代码触发错误:Fancytree assertion failed: only init supported
尝试以下代码仍触发相同错误:
var $tree = $.ui.fancytree.getTree("#tree"); $tree.destroy(); pageTree();
解决方法
Fancytree 2.31.0起,destroy方法的实现逻辑变更,不再支持销毁后直接重新初始化,推荐两种方案:
方案1:重载数据并清除选中状态
无需销毁组件,直接重置选中状态并重新加载数据:
const tree = $.ui.fancytree.getTree("#tree"); // 清除所有选中节点的高亮 tree.getSelectedNodes().forEach(node => node.setSelected(false)); // 重新加载数据,可传入新配置或数据源 tree.reload({...newOptions});
方案2:清理DOM后重新初始化
如果需要完全重置组件配置,可先清理DOM和关联数据:
const $treeEl = $("#tree"); // 清空节点并移除Fancytree绑定的数据 $treeEl.empty().removeData("ui-fancytree"); // 重新初始化组件 pageTree();
内容的提问来源于stack exchange,提问作者heero
相关产品推荐
相关产品推荐

