最近在项目里用到了Ext的Gridpanel来加载操作数据,出现了一个很奇怪的问题,比如A同学申请使用车辆1,然后经过审批之后使用并返还车辆。当他在几天后再次申请该车辆时,填写完申请表之后,在历史管理里面,最新申请的这条记录就会将以往该同学申请车辆1的记录覆盖掉,好几天了,百思不得其解。具体问题如下:

  

  正确的显示结果应该如上图所示,注意编号为21和24的数据,这是同一个人分两次申请的车辆记录,按理来说应该都显示出来才对,但是却遇到了如下的问题,如下图:

  

  在这里可以看到,编号为21的数据在这里就不现了,没了................同样,编号为22和25的数据也是这个问题。

结果推敲之后确定了问题可能出现的地方,proxy,store,gridpanel,最后是通过了store的getCount()和getTotalCount()方法确定了问题就出现在store这里。getTotalCount()是返回后台传过来的所有的数据数目,

getCount()是store加载到缓存的数据数目,通过调用显示gettotalcount显示的是 6,而getcount显示的是4,也就是说是store把那两条数据过滤了。查了一下ext中关于store的api,没有对应的配置项啊,真实烦人,在网上也没看到谁遇到了这样的问题。调试代码如下:

 

 var store = new Ext.data.JsonStore({
                baseParams:{type:0,index:1,turn:'application',apppersonid:userid},
                proxy: proxy,
                autoLoad:true,
                fields: ['Appid','id','vehiclename','person','depart','des','begintime','endtime','statusdepart','statusleader','statusoffice','count','remark','precost','reason'],
                listeners: {
                    load: function (store, records, options) {
                        alert(store.getTotalCount());
                        alert(store.getCount());
                    },
                    loadexception: function (proxy, options, response) {
                        Ext.Msg.alert('加载数据错误!', response.responseText);
                    }
                }
            });

  正在郁闷的时候忽然想起了之前买的关于Ext的参考书,是介绍ext新版本的(我用的Ext 是3.2),看了一下关于store的部分,发现了JsonReader里有一个属性:“idProperty ”,肯定就是这个的问题了。书上对这个属性的描述如下:“参数定义的是数据源中可作为记录唯一标记的字段名称,如果没有设置,store会自动产生这个唯一标记”,意思就是如果不设置的话,我认为系统会自动为某一个字段设置这个属性,如果不巧这个字段有重复值的话,那么这一部分数据又有不给吃掉的危险了,加上这个之后再运行一下,正确结果就出来了。

  总结一下这个问题的原因,是自己对于新版本的Ext不太了解,相对于原来的内容增加了一下属性设置,我的api是3.0的,看来又要更新了。

  

posted on 2010-11-19 17:26  苍茫大地NV  阅读(1524)  评论(0)    收藏  举报