我有一个fancytree实现,其中每个父节点都有一个可以选择的子节点。用户选择特定的孩子后,她可以保存她的选择和设置,以便她以后可以回来。
除了我初次加载以前保存的数据时,我能够完成所有这些操作。我需要做的是识别需要打开的节点(及其子节点被选中),并让Fancytree打开这些节点并选择子节点。
我正在使用延迟加载,当懒惰加载事件触发时,我能够检查是否需要选择子项并根据需要执行此操作。我希望能够以编程方式执行相同的操作,以便在加载时加载和选择所有先前选择的子项。目前,我正在尝试这样做:
function getMultipleFieldsNoReset(element,selectedFieldsArray) {
var fieldCreator = element.value;
var tree = $("#multipleFields").fancytree("getTree");
var treeOptions = {
url: "urltogetdata",
type: "POST",
data: {
id: fieldCreator
},
dataType: "json"
};
tree.reload(treeOptions);
for (var i = 0, len = selectedFieldsArray.length; i < len; i++) {
var valueAry = selectedFieldsArray[i].split("-");
var growerNode = valueAry[0];
var farmNode = valueAry[1];
var fieldNode = valueAry[2];
var node = tree.getNodeByKey(growerNode);
console.log(node);
}
}
我的问题是tree.getNodeByKey(growerNode)从未找到该节点,即使我在此运行后能够在控制台中找到该节点。看起来父节点尚未加载,这可能会导致此问题,但我不确定在哪里可以设置 完整的 功能。我在哪里可以做到这一点?或者甚至更好,是否有更清洁的方法来处理这个?
答案 0 :(得分:1)
OP / Fletchius已经解决了这个问题,下面就是答案。我以某种不同的方式实现了它,但事件loadChildren
是相同的。从中我们都找到了解决方案。我只是加载那些选定节点的节点,lazy true
意味着在此节点之后有子节点。只有lazy=true
对this.load();
显式事件有用。
loadChildren:function(event, data){
var node = data.node;
$(node.children).each(function(){
if(this.selected && this.lazy)
{
this.load();
}
});
},