FLEX CheckBox 翻页后选中状态显示错乱

维护一个Flex 项目,项目有点老,无意被我发现了一个bug,checkbox混乱显示。

BUG描述:DataGrid 一行ItemRenderer是单选框,当只有一页数据的时候,没问题,但当有两页及以上数据的时候,如果在第一页选中了部分记录,翻页再选几条,然后再翻到第一页,发现现在被选中的数据已不是我开始选中的了,但是我自己将选中数据放到了一个Array中,发现记录是没错的,只是单选框的选中状态错了。

 BUG原因:每次翻页的时候,当前数据的指向会变化,而判断选中与否的依据就是array中是否包含了当前页面的数据data,用的是ArrayCollection.contains()这个方法。

但是这个方法比较的是引用,而data在每次翻页的时候他的引用都会发生变化,所以每次翻页就会错乱。

BUG解决:我自己是这样解决的,由于我flex 也不熟悉,可能不是很好。

由于我的数据复杂,所以我建立了Array_data ,array_id两个容器。判断的时候  我判断array_id是否包含 data.id;这样虽然data 的整体引用改变了,但是data 的id是不变的。

然后我在ItemRenderer中增加了一个dataChange方法。这样每次我的数据翻页的时候,我都去做个判断,拿data的id和array_id里的id做比较,这样就防止了 翻页显示错乱的现象了。

这个是每次点击单选框来存储数据data和data的id:


var data_list:ArrayCollection = parentDocument.parentDocument.dgselected;//存储选中的对象data
                var arr_Id:ArrayCollection=parentDocument.parentDocument.arr_id;//存储选中的sid
                
                if(cbox.selected)
                {
                    //最开始的判断方式    当翻页后就无法判断了
//                    if(!data_list.contains(data))
//                    {
//                        data_list.addItem(data);
//                        arr_Id.addItem(data.shopkeeper.sid);
//                        isshow = true;
//                    }
                    if(!arr_Id.contains(data.shopkeeper.sid))
                    {
                        data_list.addItem(data);
                        arr_Id.addItem(data.shopkeeper.sid);//用于页面刷新后  显示选中状态
                        isshow = true;
                    }
                }

这个是 每次翻页后判断显示状态: isshow为布尔型,来控制checkbox的选中状态;

protected function griditemrenderer1_dataChangeHandler(event:FlexEvent):void
            {
                
                if(parentDocument.parentDocument.arr_id.contains(data.shopkeeper.sid))
                {
                    trace(parentDocument.parentDocument.arr_id.length)
                    isshow=true;
                }else
                {
                    trace(parentDocument.parentDocument.arr_id.length)
                    isshow=false;
                }
            }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值