Подтвердить что ты не робот

Как перезагрузить/обновить/восстановить DynaTree?

Когда я делаю следующее

$('#tree').dynatree("option","initAjax",{url:"http://google.com"});

Я хочу, чтобы dynatree забыл о текущих данных дерева и перезагрузился с новыми данными из указанного URL. Но я считаю, что это не делает по умолчанию.

Спасибо.

4b9b3361

Ответ 1

Посмотрите на метод tree.reload(), он должен делать то, что вам нужно.

см. здесь документы: http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html#h8.2

как в документах, дерево является внутренним чертежом дерева, и вы получаете его, вызывая команду getTree: $("#node").dynatree("getTree")

Ответ 2

tree.reload(); предназначен для динамической загрузки данных, как в Ajax. Если вы работаете с списками ul/li и вам нужно перезагрузить дерево, вам нужно сделать следующее: $("#tree").dynatree("destroy"); до вашего обычного кода создания dynatree. Параметр destroy не документирован (см. http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html).

Ответ 3

Функция инициализации:

function InitTree() {
   $("#tree3").dynatree({
       (...init params...)
   });
}

InitTree();

Чтобы перезагрузить данные, вызовите:

$("#tree3").dynatree("destroy");
InitTree();

Ответ 4

Этот вопрос является дубликатом Попытка перезагрузить/обновить dynatree новыми данными

Мое решение не требует обходных путей, таких как empty() и 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 каждый раз, когда нажимается кнопка, а затем перезагружает дерево.

Ответ 5

Если вы хотите перезагрузить средство Dynatree, сначала удалите node Под ним код

$( "# дерево" ) dynatree ( "GetRoot" ) removeChildren();..

Ответ 6

Вначале я использовал "опции" с initAjax для вызова ajax. Однако, так как я должен был показать сообщение об ошибке, если после перезагрузки был пустой ответ с сервера, я решил пойти обычным ajax-маршрутом. Я делаю вызов ajax, получаю ответ, а затем перезагружаю дерево. Так что я сделал это как в моем файле javascript

    var myObj = {getDynaTree :function(){

    //Refresh the dynatree
    $("#dynaTree").dynatree("option", "children", null);
    $.ajax({
        url: "myurl", 
        type: "POST", 
        dataType: "application/json", 
        headers:{'Accept' :'application/json',  'Content-Type':     'application/json' }, 
        data : JSON.stringify(myData),
        //handle the response
        complete : function(treeData)
            {

            $("#dynaTree").dynatree("option", "generateIds", true);      

            var parsedTreeData = JSON.parse(treeData.responseText);

            if(parsedTreeData.length ==0) {
                var parsedTreeData = [{title: "No documents found for the  search criteria, please revisit the criteria",
                    isFolder: false, tooltip: "No documents found for the search criteria, please revisit the criteria" }];

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

            }
        });

    }}

Функция вызова

    $("#myLink").click(function() {  myObj.getDynaTree(); }

Динатрия была инициализирована в отдельном файле javascript

    //Initialization for the dyna tree. 
    var treeData = [{title: "Dynamic Tree Demo",isFolder: false, tooltip: "Here, is your Dynamic Tree!" }];

    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;
        },

        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;
            }
        }


    });
}

Ответ 7

n= "#tree";
$(n).dynatree({});
tree = $(n).dynatree("getTree");
root = tree.getRoot();
tree.enableUpdate(false);
root.removeChildren();
tree.enableUpdate(true);