当我执行以下操作时
$('#tree').dynatree("option","initAjax",{url:"http://google.com"});
我希望 dynatree 忘记当前的树数据,而是从指定的 url 重新加载新数据。但我发现默认情况下它不会这样做。
谢谢。
当我执行以下操作时
$('#tree').dynatree("option","initAjax",{url:"http://google.com"});
我希望 dynatree 忘记当前的树数据,而是从指定的 url 重新加载新数据。但我发现默认情况下它不会这样做。
谢谢。
看看tree.reload()
方法,它应该做你所追求的。
在此处查看文档:http ://wwwendt.de/tech/dynatree/doc/dynatree-doc.html#h8.2
在文档中,树是树的内部绘图,您可以通过调用 getTree 命令获得它:$("#node").dynatree("getTree")
tree.reload();
用于动态加载的数据,就像在 Ajax 中一样。如果您正在使用 ul/li 列表并需要重新加载您的树,您必须这样做:
$("#tree").dynatree("destroy");
在您的常规 dynatree 创建代码之前。该destroy
参数未记录。
初始化函数:
function InitTree() {
$("#tree3").dynatree({
(...init params...)
});
}
InitTree();
要重新加载数据,请调用:
$("#tree3").dynatree("destroy");
InitTree();
这个问题与Trying to reload/refresh dynatree with new data重复
我的解决方案不需要诸如此类的弯路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
每次单击按钮时设置配置,然后重新加载树。
如果你想重新加载 Dynatree 意味着首先删除节点通过他下面的代码
$("#tree").dynatree("getRoot").removeChildren();
最初,我使用带有 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(); }
dynatree 在单独的 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;
}
}
});
}
n= "#tree";
$(n).dynatree({});
tree = $(n).dynatree("getTree");
root = tree.getRoot();
tree.enableUpdate(false);
root.removeChildren();
tree.enableUpdate(true);