jQuery MiniUI

 找回密码
 立即注册
查看: 4428|回复: 9
打印 上一主题 下一主题

关于tree和treegrid半选的疑问 [复制链接]

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2013-7-26 16:15:24 |只看该作者 |倒序浏览
本帖最后由 veryfine 于 2013-7-26 16:21 编辑



如下图,半选状态为什么会出现上面的不一致的情况,是BUG?还是我的操作的问题

我是通过tree.load(url)加载的数据,数据格式为

[
{id:'01', pid:'root', text:'文本一', checked:true},
{id:'01.01', pid:'01', text:'文本二(文本一的子项)', checked:true},
{id:'01.01.01', pid:'01.01', text:'文本三(文本二的子项)', checked:true}
{id:'01.01.02', pid:'01.01', text:'文本四(文本二的子项)', checked:false}
]
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 8Rank: 8

沙发
发表于 2013-7-26 16:34:39 |只看该作者
第2,3张图的状态是对的,
第1张图是不是有其他的子节点选中了导致父节点半选了??

Rank: 3Rank: 3

板凳
发表于 2013-7-26 16:54:51 |只看该作者
本帖最后由 veryfine 于 2013-7-26 16:56 编辑
felt 发表于 2013-7-26 16:34
第2,3张图的状态是对的,
第1张图是不是有其他的子节点选中了导致父节点半选了?? ...

第一张的顶层半选状态确实其下有其他全选的非末级子节点,2和3图是同一个页面上拷下来的,唯一区别就是3图多选了两个。
半选状态按我猜想的逻辑应该是如下:
当前节点之下只要有任意节点有选择(包括其下的子、孙 ...各层次,可以只判断子节点,但子节点的半选状态也要算作选择状态处理),当前节点就是半选状态
当前节点之下没有任何节点有选择(包括半选状态),当前节点就是非选择状态
当前节点之下所有节点均是完全选择状态,当前节点才是完全选择状态
基于我之上的逻辑,我发现目前的结节状态显示是有出入的,因为在2图中,我们可以明显看到顶层节点之下是有节点处于选择状态的(子节点半选状态,孙节点完全选择状态)。

Rank: 8Rank: 8

地板
发表于 2013-7-26 17:07:40 |只看该作者
但子节点的半选状态也要算作选择状态处理

你所说的逻辑12好像有矛盾吧。

当前节点下又子节点选择(只包括子节点层次,孙节点及以后不算),那么当前节点时半选。
当前节点之下没有任何节点有选择(包括半选状态),当前节点就是非选择状态。
当前节点之下所有节点绝世完全选择状态,当前节点才是完全选择状态。

现在我们的节点选择状态关系和这逻辑符合的吧。

Rank: 3Rank: 3

5#
发表于 2013-7-26 19:35:01 |只看该作者
本帖最后由 veryfine 于 2013-7-26 19:36 编辑
felt 发表于 2013-7-26 17:07
你所说的逻辑12好像有矛盾吧。

当前节点下又子节点选择(只包括子节点层次,孙节点及以后不算),那么当 ...
括其下的子、孙 ...各层次,可以只判断子节点,但子节点的半选状态也要算作选择状态处理

我这句话表达的意思应该这样理解:

实际是当前节点的子节点、孙节点及以下任意有选中状态(但没有全部选中),当前节点就是半选状态。而我后面所说“可以只判断子节点,但子节点的半选状态也要算作选择状态处理”是从程序角度出发来说的,即:如果孙子节点中有选中的节点(但没有全部选中),则子节点是半选状态,这时即使这个子节点的所有兄弟节点都没有选中,当前结点也应该是半选状态。换句话说就是当前节点的子节点中,任意有一个是选中状态或半选状态(所有子节点不能全部是选中的状态),当前节点就应该是半选状态。

Rank: 9Rank: 9Rank: 9

6#
发表于 2013-7-27 09:45:38 |只看该作者
你说的太复杂了。
你提供一个html示例,包含你的数据,能重现你说的问题,上传我们看看。

Rank: 3Rank: 3

7#
发表于 2013-7-27 22:34:33 |只看该作者
niko 发表于 2013-7-27 09:45
你说的太复杂了。
你提供一个html示例,包含你的数据,能重现你说的问题,上传我们看看。 ...

2图和3图其实已经说明了情况,示例中有三层节点。

2图中的第二层节点是半选状态,这点我们的理解都是一样的,关键是顶层节点,目前的UI版本顶层节点处于非选定状态,而我想要的是半选状态。

即我的逻辑是:只要节点下有选择状态的节点(哪怕是是半选择状态),这个节点就需要处于半选状态。并且这个半选状态希望可以传值(即通过getCheckedNodes获取选择的结点时,要把半选的节点算上,当然也可以通过一个属性值来设置是否把半选状态的节点计算在getCheckedNodes里)

Rank: 8Rank: 8

8#
发表于 2013-7-29 09:09:54 |只看该作者
veryfine 发表于 2013-7-27 22:34
2图和3图其实已经说明了情况,示例中有三层节点。

2图中的第二层节点是半选状态,这点我们的理解都是一 ...

这是正确的,半选代表着该节点下方,有该节点的子节点选中,但是半选不代表着该节点是被选中的,所以对于该节点的父节点来说,他下面没有子节点被选中,所以没有被标记成半选状态。

Rank: 3Rank: 3

9#
发表于 2013-7-30 20:05:37 |只看该作者
本帖最后由 veryfine 于 2013-7-30 20:08 编辑

那么,如果当树形结构有多级(至少3级或以上),我在页面上如何通过顶层节点知道其下节点(孙节点或曾孙节点)至少有一个是被选中的(这样可以防止选中或取消选中顶层节点导致级联全选了所有的子孙节点而不小心破坏之前状态)。同时我要达到下级节点选中,上级节点也能通过getCheckedNodes传值的目的。

Rank: 8Rank: 8

10#
发表于 2013-7-31 10:04:52 |只看该作者
veryfine 发表于 2013-7-30 20:05
那么,如果当树形结构有多级(至少3级或以上),我在页面上如何通过顶层节点知道其下节点(孙节点或曾孙节 ...

好的,我们修复下

Archiver|普加软件

GMT+8, 2024-11-27 16:33 , Processed in 1.051312 second(s), 10 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部