Как перезагрузить/обновить/восстановить DynaTree?
Когда я делаю следующее
$('#tree').dynatree("option","initAjax",{url:"http://google.com"});
Я хочу, чтобы dynatree забыл о текущих данных дерева и перезагрузился с новыми данными из указанного URL. Но я считаю, что это не делает по умолчанию.
Спасибо.
Ответы
Ответ 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);