无法动态添加/删除元素到jstree

时间:2017-03-23 18:58:24

标签: javascript jstree

我搜索了网站,根据各种较旧的答案,我确保'check-callback'设置为'true'。我也尝试在check-callback中使用一个函数。我发现了一个非常简单的jsfiddle,它表现出了工作行为[http://jsfiddle.net/3q9Ma/223/],并且不能真正理解对jstree.create_node()的调用有什么不同;成功警报不会触发,所以显然有些不对劲。我也尝试将'#'更改为null,根据jsfiddle文档,无济于事。

我在这里创建了一个展示非工作行为的jsfiddle:https://jsfiddle.net/z0tjc91v/

基本上,我有一个jstree,并希望使用文本框的内容在点击按钮时添加或删除元素。

HTML:

<label for="drawerName">Current Drawer:</label>
<input type="text" id="drawerName">
<div id="btnDiv">

  <button id="newDrawerBtn" type="button" class="btn btn-success">
    <span class="glyphicon glyphicon-plus-sign pull-left"></span>New Drawer
  </button>

  <button id="deleteDrawerBtn" type="button" class="btn btn-danger">
    <span class="glyphicon glyphicon-remove-sign pull-left"></span>Delete Drawer
  </button>
</div>
<div id="drawerTreeDiv">
</div>

使用Javascript:

$(function() {
  var currentFile;

  $('#drawerTreeDiv')
    .on('changed.jstree', function(e, data) {

      currentFile = data.instance.get_node(data.selected[0]).text;
      $('#drawerName').val(currentFile);
    })
    .jstree({
      'core': {
        'multiple': false,
        'check-callback': true,
        'data': [{
          'id': 'path/to/foo',
          'text': 'foo'
        }, {
          'id': 'path/to/bar',
          'text': 'bar'
        }]
      }
    });
  $('#newDrawerBtn').on('click', function() {
    let filename = $('#drawerName').val();
    let pathname = '/path/to/' + filename;
    var newNodeJson = {
      'id': pathname,
      'text': filename

    };
    $('#drawerTreeDiv').jstree().create_node('#', newNodeJson, 'last', function() {
      alert("added");
    });

    //$('#drawerTreeDiv').jstree().refresh();
  });

  $('#deleteDrawerButton').on('click', function() {
    let filename = $('#drawerName').val();
    let pathname = '/path/to/' + filename;
    var node = $('#drawerTreeDiv').jstree().get_node(pathname);

    $('#drawerTreeDiv').jstree().delete_node(node);
    $('#drawerTreeDiv').jstree().refresh();

  });

1 个答案:

答案 0 :(得分:1)

我发现了问题。我将check-callback设置为true,而不是check_callback。当我做出改变时,它起作用了。