我在angularjs中使用jsTree并使用" select_node"准备好"。此方法返回false。在调试的代码上,观察到tree.instance._model.data没有该节点,因此this.get_node(obj);返回false。 (下面是代码片段)
select_node : function (obj, supress_event, prevent_open, e) {
var dom, t1, t2, th;
if($.isArray(obj)) {
obj = obj.slice();
for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
this.select_node(obj[t1], supress_event, prevent_open, e);
}
return true;
}
obj = this.get_node(obj); //here it returns false
if(!obj || obj.id === '#') {
return false;
}
}
我不确定为什么tree.instance._model.data当时没有数据,因为它经常在我刷新浏览器时有效。
有任何帮助吗?以下是我的代码段。
me.onTreeReady = function (eve, tree) {
tree.instance.deselect_all();
tree.instance.refresh(true, true);
var response = tree.instance.select_node(defaultNode);
}
答案 0 :(得分:0)
这必须是与角度指令提供者相关的某种竞争条件。
答案 1 :(得分:0)
此问题已得到解决。我添加了&#34; id&#34;到html,所以当使用相同的id创建多个实例时,它会给出上述错误。通过删除此ID来解决问题。
旧代码
<div class="row no-margin" cg-busy="ctrl.promise">
<div class="bg-white">
<div **id="treeView"** js-tree="ctrl.treeConfig"
should-apply="ctrl.applyModelChanges()"
ng-model="ctrl.treeData"
tree="ctrl.treeInstance"
tree- events="ready:ctrl.onTreeReadyEvent;select_node:ctrl.onNodeSelectEvent;deselect_node:ctrl.onNodeDeselectEvent">
</div>
</div>
</div>
新守则:
<div class="row no-margin" cg-busy="ctrl.promise">
<div class="bg-white">
<div js-tree="ctrl.treeConfig"
should-apply="ctrl.applyModelChanges()"
ng-model="ctrl.treeData"
tree="ctrl.treeInstance"
tree- events="ready:ctrl.onTreeReadyEvent;select_node:ctrl.onNodeSelectEvent;deselect_node:ctrl.onNodeDeselectEvent">
</div>
</div>
</div>