RT,ext的grid翻页后不能保存checkbox的选中状态,搜不到解决办法

解决方案 »

  1.   

    到网上找一个人家写好的HashMap,然后自己实现吧!
      

  2.   

    解决思路:
       1. 首选考虑,使用数组或者map等保存我们选中的记录
              在CheckboxModel中,select用来选中,deselect用来反选(取消选中),
               select时,把记录保存进我们的数组中
               deselect时,把数组中曾放进去的该记录删除
       2. 之后,在每次翻页的时候,要把曾选中的记录在该页标示为选中状态
              store中 ,load方法中处理,比较数组中和store中的数据,相同的记录设为选中状态
       3. 前2步之后,可以了,但是发现还是会在翻页中删除;
          原因,在load的时候,EXT4还是自动调用了deselect方法,这样就无形中删除了保存在数组中的记录
          因此,我们在load之前要处理: before中,我们禁用deselect方法,load之后在放入deselect方法
     
    解决代码:  
         // stroe中添加事件:
     
    listeners : {beforeload : function(store, operation, eOpts) {Ext.apply(store.proxy.extraParams, me.getQueryParameters());selMod.removeListener('deselect');},load : function(store,records,succ,eOpts) {selMod.removeListener('deselect');var selections = new Array();store.each(function(record){if(recordIds.length>0){for(i=0;i<recordIds.length;i++){var name="code">//反选:删除选中var deSelection=function(sm,rec){recordIds.pop(rec.data.tableId);alert("删除当前选中的记录"); };
       
    var selMod=Ext.create('Ext.selection.CheckboxModel', {checkOnly : true,listeners:{select:function(sm,selection,num,opts){recordIds.push(selection.data.tableId);alert("选中当前记录");},deselect:deSelection}});
      

  3.   


    listeners : {beforeload : function(store, operation, eOpts) {Ext.apply(store.proxy.extraParams, me.getQueryParameters());selMod.removeListener('deselect');},load : function(store,records,succ,eOpts) {selMod.removeListener('deselect');var selections = new Array();store.each(function(record){if(recordIds.length>0){for(i=0;i<recordIds.length;i++){var name="code">//反选:删除选中var deSelection=function(sm,rec){recordIds.pop(rec.data.tableId);alert("删除当前选中的记录"); };
       
    var selMod=Ext.create('Ext.selection.CheckboxModel', {checkOnly : true,listeners:{select:function(sm,selection,num,opts){recordIds.push(selection.data.tableId);alert("选中当前记录");},deselect:deSelection}});
      

  4.   

    先记录所选的数据,可以是这条数据的编号id,放到变量中,当翻到其他页的时候 同样 把其他页面的编号id连接到刚才的id字符串中,当再翻回来的时候就遍历刚才所搜集到的id字符串,比较当前页数据的编号id与id字符串中是否有匹配的,有那就选中 没有那就不选中。
    不过貌似现在很多网站或者其他的功能都没提供翻页后还选中的功能。都采用单页选择的了
      

  5.   

    把每次选择的记录都存放在一个map里面,当页面加载的时候,去判断map里面是否有对应的记录,有的话,则勾选上。
      

  6.   

    ext 自带有一个类似于java的map类。
    var coll = new Ext.util.MixedCollection();
    coll.add('key1', 'val1');
    coll.add('key2', 'val2');
    coll.add('key3', 'val3');
    思路就是2楼的做法。我就不重复了。