Extjs3.4 的 TreeLoader参数preloadChildren

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> 今天在现场调试js,用户说自动执行的任务没有执行。。 </span>

  我查看js,这个自动任务是由任务画面中左侧任务树选中的节点记录生成的,任务画面会把这些要执行的任务id记录入库。
   理论上,既然已经入库,应该可以从库里把相关信息可以读出来,为何还从js中去取,这不得而知。
   整体前台框架用的ExtJs3.4,任务树也是其自带的TreePanel。

基于不大量修改代码的基础,继续查看js,根据任务树节点的任务id,调用自定义的树监听事件(根据任务id获取整个任务的信息),可以查找到这个任务的执行参数,然后直接填入参数,直接执行。

   从传入树的json数据来看,这些任务信息都应该能正确的赋值,但是为什么根据自定义事件中方法中的调用findChildBy 这个方法最后获取不到呢.

   后来我关注到TreeLoader参数preloadChildren

        preloadChildren:在第一次加载子节点后是否递归加载所有子节点。

      由上述信息,并不知道"是否递归加载所有子节点"这个是什么意思?而且度娘了半天,并没有查到如果该参数为false时是什么情况。

       套用一句广告词,抱着试试看的态度,将其有false改为true,刷新画面,断点处打印,奇迹出现了,获取到对应节点了。   

然后,跟踪Ext代码,如下

   doPreload: function (d) {

         if (d.attributes.children) {

            if (d.childNodes.length < 1) {
                var c = d.attributes.children;
                d.beginUpdate();
                for (var b = 0, a = c.length; b < a; b++) {
                    var e = d.appendChild(this.createNode(c[b]));
                    if (this.preloadChildren) {
                        this.doPreload(e)
                    }
                }
                d.endUpdate()
            }
            return true
        }
        return false
    },

 可以看到此处用到的preloadChildren这个参数,如果是false,只加载根节点下的一级节点就完毕了,不会向下递归。此时,虽然画面上的树展现出来了,但是通过js获得的这个tree对象里面,一级节点的childNode为0,

 (有一点需注意,当你点击一级节点加载其子节点后,会相应的在tree对象中加入了这些子节点元素,这是一级节点的childNode就不是0了)。

  


 综上所述,可以得到结论,

      preloadChildren  如果为true,则代表加载完整个树后,你通过js,可以获取到这个树对应的所有节点;

                                      如果为false,则代表加载完整个树后,不主动去加载其子节点,则你通过js获取到的tree的子节点是不完整甚至为空的。



同时 吐槽以下csdn的编辑器好水,不知道是我不会用还是怎么地,样式总是好乱,请大家见谅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值