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");
}
}