【问题标题】:How to update jstree node values without reload如何在不重新加载的情况下更新 jstree 节点值
【发布时间】:2014-10-23 16:36:29
【问题描述】:

我有一个使用以下代码创建的 jstree:

$('#mytree').jstree({"core": { "data" : value
                             , "themes" : { "dots": false
                                          , "icons": false }
                             }
                    }
                   );

我可以通过这段代码用新数据重建它:

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();

但是当你有很多节点时它可能会很昂贵。我想要实现的是我想更新元素的值(即node.text 部分)而不重建整个树。我通过 websocket 在一条消息中获取新值(完整的 JSON 字符串将是 new_data),但结构没有改变。我怎样才能做到这一点?谢谢!

【问题讨论】:

    标签: jstree


    【解决方案1】:

    您需要的不是refresh(),而是redraw(),因此代码是

    $('#mytree').jstree(true).settings.core.data = new_data;
    $('#mytree').jstree(true).redraw(true);
    

    你可以在jstree API找到函数。

    根据 zmirc 的建议,在 v3.1 中使用:

    $('#mytree').jstree(true).settings.core.data = new_data;
    $('#mytree').jstree(true).refresh();
    

    【讨论】:

    • 对于 v 3.1.0,它似乎不起作用,除非 redraw(true) 被 refresh() 替换。
    • 我一直在尝试使用它,它似乎可以工作,但对象的状态似乎没有更新。是否可以强制新绘制的树符合 new_data 中提供的状态选项?
    【解决方案2】:

    用于删除节点并重新加载树

     $('#mytree').jstree(true).refresh();
    

    对于那些需要在不重新启动树的情况下重绘的人使用

    jQuery('#data').jstree(true).refresh(true);
    

    【讨论】:

      【解决方案3】:

      为我工作:$('#structureRows').jstree("destroy").empty();

      function CreateStructureTree(jsonData)
              {
                  $('#structureRows').jstree("destroy").empty(); 
                  $('#structureRows').jstree
                      ({
                          'core' : {
                              'data':
                                  [
      
                                      jsonData,
                                      {
                                      'id' : 'node_2',
                                      'text' : 'Root node with options',
                                      'state' : { 'opened' : true, 'selected' : true },
                                      'children' : [ { 'text' : 'Child 1' }, 'Child 2']
                                      }
                                  ]
      
                           }
                      });
      
                  }
      

      【讨论】:

        【解决方案4】:

        你可以通过这个刷新节点

        $('#treeView').jstree(true).refresh_node("node_id_here")
        

        【讨论】:

          【解决方案5】:

          $('#mytree').jstree(true).refresh(); 正在工作,但在我的情况下,它会导致线程泄漏。 每次刷新都会增加一个线程

          【讨论】:

            【解决方案6】:

            我通过 url 加载数据,所以我的刷新部分如下所示:

            $('#groupTree').jstree(true).settings.core.data.url = get_group_url();
            

            【讨论】:

              【解决方案7】:
              1. $('#YourJSTREE').jstree("destroy").empty();
              2. 设置新数据
              3. $('#YourJSTREE').jstree(true).refresh();

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-01-10
                • 1970-01-01
                • 1970-01-01
                • 2021-07-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-04-12
                相关资源
                最近更新 更多