我已经看过这个question了,我已经尝试过给出的解决方案(使用tree.reload()),但它对我不起作用。我有一个使用initAjax()在doc就绪初始化的树,我正在尝试使用不同的值重新加载树,以更改选择输入。基本上这个:
$(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();
)};
)};
问题是树继续使用相同的参数重新加载...我可以在控制台的网络选项卡中看到,每次发送的参数都是相同的,即使我已经验证了我' m瞄准正确的元素,并在变化时获得正确的值。
我试过改变变量的范围,我尝试将dynatree选项放在一个单独的变量中,我试过调用
$('#tree').children().remove();
$('#tree').dynatree(treeoptions);
在change()函数中,我试过调用tree.initialize()(是的,我知道它是一个构造函数),我已经尝试过tree.redraw(),我尝试过单独设置initAjax选项之前调用reload(),我被卡住了。
有什么想法吗?
此时,我决定唯一要做的就是将树初始化放入一个函数中,并在更改select选项时,吹走树(包括其父div)并重建它。如果没有其他方法可以使用新数据重建树,我会感到惊讶,这与我使用其他小部件的经历背道而驰。
答案 0 :(得分:10)
这个问题与此重复: how to reload/refresh/reinit 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上的配置,然后重新加载树。
答案 1 :(得分:7)
我在dynatree google小组上找到了这个。它对我有用。
$('.tree').dynatree('destroy');
$('.tree').empty();
答案 2 :(得分:2)
我想用默认的json初始化块,然后点击一个按钮,我想从服务器刷新它, 这就是我所做的。 Intially, var treeData = [{title:&#34; Dynamic Tree Demo&#34;,isFolder:false,tooltip:&#34;这里,是你的动态树!&#34; }];
code
然后点击一个按钮
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;
}
}
});
}