EXT2.0 checkbox树的扩展(级联)_测试及解决方案

原文:
EXT2.0 checkbox树的扩展(支持单选,级联多选,只选叶子等)
[url]http://www.iteye.com/topic/164426[/url]

最近在做ExtTree相关应用, 碰到了Checkbox级联选择的问题, 发现Ext中未处理级联问题. 刚开始修改写了一份, (不是很完善), 朋友给发了些ExtJs的资料(断网的日子, 找点资料不容易), 看到了 [xiexueze] 对CheckBox树的扩展. 感觉还不错, 在使用的过程中, 发现了个小Bug. 具体情况如下:


测试环境(主要是数据格式):
加载数据:
一次性加载所有数据
特殊情况:
加载上来的数据, 直接包含各节点的checked属性 (例如: 分配权限, 把用户已分配的功能节点checked=true, 未分配的功能checked=false)
操作情况:
情况1. 加载上来的数据, 只展开RootNode的下一级.
* 此时级联选中没有问题
情况2. 当所有数据已加载(tree.load事件)成功后, 展开所有节点(tree.expandAll()).
* 问题产生.
2.1 把任意一个非leaf节点,先折叠起来. 再改变此目录的check状态. 当前目录不会自动展开,选中或取消选中所有子节点. (不仅是这种加载方式或数据格式. 任意一个已展开过的目录, 这样操作都会有此问题存在)
2.2 特别是针对, 后台返回的数据, 本身就带有checked属性的情况. 问题将更明显. (容易发生当前目录的check状态和其leaf的对应不上的情况.)

针对以上问题, 查看其源码(TreeCheckNodeUI.js) 140行发现. 代码如下:

if( !n.expanded && !n.childrenRendered ) { // n为当前点击的node
n.expand(false,false,this.childCheck);
}else {
this.childCheck(n);
}


这里只验证了如果当前节点处于未展开状态并且其子节点未rednder时,才展开此节点并选中或取消选中child节点.
这里简单解决方案: (即使node.childRendered, 也展开)

if( !n.expanded && !n.childrenRendered ) {
n.expand(false,false,this.childCheck);
}else {
if(!n.isLeaf() && !n.isExpanded()) // 修改, 解决对已render的节点级联问题
n.expand(false, false, this.childCheck);
this.childCheck(n);
}

为保持源码的逻辑, 修改后的代码如上.(考虑到作者是否还有其它的含意)
但理论上来说: 就可以去掉这个判断了, 直接写成:

if(!n.isLeaf() && !n.isExpanded()) // 修改, 解决对已render的节点级联问题
n.expand(false, false, this.childCheck);
this.childCheck(n);

因时间关系, 这里没有考虑其它的情况(如leaf节点), 第二种写法的代码未测!


这两天在做其它功能, 发现,好像还没有从根本上解决问题. 问题的关键好像是在 展开与折叠 事件. 等有空了,再调试这个细节问题.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值