1

我在 angularjs 中使用 jsTree 并在“ready”中使用“select_node”。此方法返回 false。在调试代码时,观察到 tree.instance._model.data 没有那个节点,所以 this.get_node(obj); 返回假。(以下是代码片段)

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); 
}
4

2 回答 2

0

此问题已得到解决。我在 html 中添加了“id”,所以当使用相同的 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>
于 2015-10-09T05:25:26.183 回答
0

这必须是与您的角度指令提供者相关的某种竞争条件。

于 2015-10-07T18:16:04.650 回答