行一恒  

extjs checkbox全选问题,有一个很让人头疼的地方:就是使用它的handler,只要给checkbox 调用setValue()的话,就会触发handler的句柄函数,这不是我们想要的。这会导致单独点击view中某一项,回全选按钮一样的操作 。所以只能注册 它的"click"事件

此时,this的指代也不同。所以不得不花力气找它:var isAllchecked=toolbar.getComponent("allCheck").getValue();

其次:extjs checkbox并不是我们想象的checkbox组合而成的,而是一个button ,只是button放了几张像checkbox背景图片而且

这点确实不仔细查看,还真料不到!

做全选(当所有子项全被选中时) 最主要是获取选中的record,不如我们在item点击的时候,动态对其Record赋予一个selected属性,然后遍历store获取哪些record selected为true ,它的长度是否等于store.getCount()的长度,做出全选的动作

 

,listeners:{
                    "click":{
                        element:"el"
                        ,fn:function(e,item,el){
                            var currentView=view.currentView.items.getAt(0);
                            var store=view.store;
                            function allChecked(view,record,deselect){
                                var node=view.getNode(record);
                                var checkbox=Ext.dom.Query.selectNode("input[type='checkbox']", node);
                                var element=new Ext.dom.Element(node);
                                if (deselect) {
                                    checkbox.checked = false;
                                    record.selected = false;
                                    element.removeCls("selectModelDispaly");
                                    return;
                                }
                                checkbox.checked = true;
                                record.selected = true;
                                element.addCls("selectModelDispaly");
                            }
                            var isAllchecked=toolbar.getComponent("allCheck").getValue();
                            store.each(function(item){
                                allChecked(currentView,item,!isAllchecked);
                            });
                        }
                    }
                }

 

 

 ,itemclick:function(cmp,view,store,record,ischecked,item){
                        var element=new Ext.dom.Element(item);
                        if(ischecked){
                            var count=0;
                            element.addCls("selectModelDispaly");
                            store.each(function(item){
                                if(item.selected)count++;  //此处对sellected为true进行记录
                            });
                            if(count==store.getCount())cmp.toolbar.getComponent("allCheck").setValue(true); //相等时设置全选按钮为true,注意!!!不能使用checkbox的handler,它会执行handler的句柄函数,所以只能注册checkbox的el 的click事件!


                        }else{
                            cmp.toolbar.getComponent("allCheck").setValue(false);
                            element.removeCls("selectModelDispaly");
                        }
                    }

posted on 2013-09-04 12:25  行一恒  阅读(1609)  评论(0)    收藏  举报