在重新加载/刷新dynatree新数据(Trying to reload/refresh dynat

2019-07-29 08:16发布

我已经看到了这个问题已经和我试着解给出(使用tree.reload()),但它不是为我工作。 我有一个使用initAjax()对文档准备初始化一棵树,我试图重新加载树,使用不同的价值观,选择输入的变化。 基本上是这样:

$(document).ready(function(){
    // global variables
    var myVal = 'initial value';

    // initialize tree
    $('#tree').dynatree({
        persist: false,
        initAjax: {
            url: 'getMyStuff.cfc',
            data: { myParam: myVal }
        },
        ... more params
    )};

    // select change handler
    $('#mySelect).change(function(){
        var tree = $('#tree').dynatree('getTree');
        myVal = $(this).find('option:selected').val();
        tree.reload();           
    )};
)};

问题是,状态越来越具有相同的参数重新加载树......我可以在那个被发送的参数是相同的每次控制台的网络选项卡上看到,即使我已经验证了我的目标正确的元素和我得到的变化正确的值。

我试图改变变量的作用域,我试着放置dynatree选择在一个单独的变量,我已经打过电话

$('#tree').children().remove();
$('#tree').dynatree(treeoptions);

变化()函数中,我已经打过电话tree.initialize()(是的,我知道这是一个构造函数),我试过tree.redraw(),我试过单独设置initAjax选项调用重装前( ),和我被困。

有任何想法吗?

在这一点上,我决定做的唯一的事情是把树初始化成一个函数,并更改选择的选项时,吹走树(包括其母公司格),重建它。 如果这是真的,有没有其他的方式来重建新的数据的树,这违背了我与其他部件的经历,我会感到惊讶。

Answer 1:

这个问题就是一个重复: 如何重新加载/刷新/重新发起DynaTree?

我的解决方案并不需要像空的弯路()和destroy()等。想想这一点:当Dynatree创建您指定的设置,它必须使用的字典。 然而,由于这是一个配置字典即使一些参数是变量和变化,由于点击等,所以解决这个并避免类似删除DOM并重新创建它昂贵的操作我们做事的方式,我觉得Dynatree开发商也不会重新评估已经此意图(但在AJAX / JSON示例并非如此明确记载):

  //The HTML:
      <input name="filter" id="checkbox" type="checkbox" value="X">Checkme<br>
      <label id="mylabel"></label>

  $("#checkbox").click(function() {
    $("#mylabel").text($(this).is(":checked"))
    $("#tree").dynatree("option", "initAjax", {
             url: "myurl/myphp.php",
             data: {
                myparameter: $("#checkbox").is(":checked").toString()
             }
     });

    $("#tree").dynatree("getTree").reload();
  });

这个例子每次按钮被点击时设置的#tree配置,然后重新加载树。



Answer 2:

我发现这对谷歌dynatree组。 这个对我有用。

$('.tree').dynatree('destroy'); 
$('.tree').empty(); 

这里是原来的链接 。



Answer 3:

}];

jQuery(document).ready(function() {
    initReqActions(treeData);   
});

initReqActions= function(myTree){
    $("#dynaTree").dynatree({
        checkbox: false,            
        selectMode: 2,
         // create IDs for HTML elements that are generated
          generateIds: true, 
          cookie: {
              expires :-1  
          },    
        children: myTree,           
        onQuerySelect: function(select, node) {
            if( node.data.isFolder )
                return false;
        },
        onSelect: function(select, node) {
            // Display list of selected nodes
            var selNodes = node.tree.getSelectedNodes();
            // convert to title/key array
            //var selKeys = $.map(selNodes, function(node){
            //     return "[" + node.data.key + "]: '" + node.data.title + "'";
            //});
            //$("#echoSelection4").text(selKeys.join(", "));
        },
        onClick: function(node, event) {
            if( ! node.data.isFolder )
                node.toggleSelect();
        },
        onDblClick: function(node, event) {
            node.toggleExpand();
        },
        onKeydown: function(node, event) {
            if( event.which == 32 ) {
                node.toggleSelect();
                return false;
            }
        }

    });
}

然后,当一个按钮被点击

        jQuery(document).ready(function() {
      $("#RefreshButton").click(function() {           
       $("#dynaTree").dynatree("option", "initAjax", {
          url: "refreshTree",
          dataType: "json"

       });

      $("#dynaTree").dynatree("option", "children", null);          
      $("#dynaTree").dynatree("getTree").reload();
     });

    });


文章来源: Trying to reload/refresh dynatree with new data