在fancytree中自动加载节点children
Automatically load node children in fancytree
我有一个 fancytree 实现,其中每个 parent 节点都有一个可以 select 编辑的 child 节点。在用户 select 特定 children 之后,她可以保存她的 select 离子和设置,以便她以后可以回来使用。
除了我对以前保存的数据进行初始加载时,我可以完成所有这些操作。我需要做的是识别需要打开的节点(及其 children selected),并让 Fancytree 打开这些节点和 select children .
我正在使用延迟加载,当延迟加载事件触发时,我可以检查 child 是否需要 selected 并根据需要执行此操作。我希望能够做的是以编程方式做同样的事情,以便加载所有以前 selected children 并在加载时 selected。目前,我正在尝试这样做:
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) 从未找到该节点,即使我能够在运行后在控制台中找到该节点。似乎 parent 节点尚未加载,这可能会导致此问题,但我不确定在哪里可以设置 complete函数。我在哪里可以做到这一点?或者更好的是,有没有更简洁的方法来处理这个问题?
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();
}
});
},
我有一个 fancytree 实现,其中每个 parent 节点都有一个可以 select 编辑的 child 节点。在用户 select 特定 children 之后,她可以保存她的 select 离子和设置,以便她以后可以回来使用。
除了我对以前保存的数据进行初始加载时,我可以完成所有这些操作。我需要做的是识别需要打开的节点(及其 children selected),并让 Fancytree 打开这些节点和 select children .
我正在使用延迟加载,当延迟加载事件触发时,我可以检查 child 是否需要 selected 并根据需要执行此操作。我希望能够做的是以编程方式做同样的事情,以便加载所有以前 selected children 并在加载时 selected。目前,我正在尝试这样做:
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) 从未找到该节点,即使我能够在运行后在控制台中找到该节点。似乎 parent 节点尚未加载,这可能会导致此问题,但我不确定在哪里可以设置 complete函数。我在哪里可以做到这一点?或者更好的是,有没有更简洁的方法来处理这个问题?
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();
}
});
},