如何用新数据重绘jstree树?

时间:2014-03-15 19:51:01

标签: jquery jstree

所以,我的问题。 我用一些数据初始化了我的树:

$('#tree').jstree({
    'core' : {
        'data' : [
            'Simple root node',
            {
                'id' : 'node_2',
                'text' : 'Root node with options',
                'state' : { 'opened' : true, 'selected' : true },
                'children' : [ { 'text' : 'Child 1' }, 'Child 2']
            }
        ]
    });

但是在一些动作之后,我想用新数据重绘树。 我尝试使用API​​中的刷新重绘方法,但是没有成功。

你能给我建议吗,如何更新树(没有销毁 - >创建新实例(它可以工作,但会影响性能))?

4 个答案:

答案 0 :(得分:14)

在版本3中,您可以重新加载树:

$('#treeId').jstree(true).settings.core.data = newData;
$('#treeId').jstree(true).refresh();

答案 1 :(得分:7)

refresh()会将树刷新到它的初始状态,这意味着删除了新创建的节点

你想要的是redraw(true)

答案 2 :(得分:6)

尝试在核心设置中包含check_callback参数(包括初始加载)并确保将其设置为true。然后你应该能够看到任何改变。没有这个,我发现我没有看到替换数据,只看到了原始数据。

$('#tree').jstree({
'core' : {
    'check_callback' : true,
    'data' : [
        'Simple root node',
        {
            'id' : 'node_2',
            'text' : 'Root node with options',
            'state' : { 'opened' : true, 'selected' : true },
            'children' : [ { 'text' : 'Child 1' }, 'Child 2']
        }
    ]
});

这为我处理了更新部分,但根据您正在做的事情,您也可以致电$('#tree').jstree('refresh');

答案 3 :(得分:0)

你需要这个

$('#tree').jstree(true).refresh(false, true);

刷新参数:skip_loading?:布尔值,忘记状态?:任何 参数:

skip_loading=false

意思是:你想看到加载指示器

forget_state=true: forget previous state (selections, data, etc)