首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

extjs jsonstore筛选重复数据有关问题,大家入来指点下。

2012-02-12 
extjsjsonstore筛选重复数据问题,大家入来指点下。 - Web 开发 / Ajax本人写的一个store如下:Java codethis

extjs jsonstore筛选重复数据问题,大家入来指点下。 - Web 开发 / Ajax
本人写的一个store如下:

Java code
                this.store = new Ext.data.JsonStore({                            url : "/work/listWork.do",                            root : "result",                            totalProperty : "totalCounts",                            remoteSort : true,                            idProperty : "userId",//通过两张表相同字段筛选唯一记录                            fields : [{                                        name : "workId",//work表主键字段                                        type : "int"                                    }, "user"]//user表                        });


如上面所写,在数据显示区域会有空白记录占据,因为加了idProperty属性去了重复的记录。如何能不让已经筛选掉的记录不占据页面空间呢?

user表记录人员信息,work表记录职位工作信息,一个userId在work表可能有多条记录,我的目的是界面只显示其中一条记录,再通过界面显示的这条记录点击进入看这个userId的所有相关work信息。work表信息如下:
workId userId content1 content2
1 1 a1 a2
2 1 b1 b2
3 2 c1 c2
4 3 d1 d2
不加idProperty属性界面显示:(假如一页显示2条记录)
content1 content2
a1 a2
b1 b2
c1 c2 (这里是第二页了)
d1 d2
加了idProperty属性界面显示:
content1 content2
a1 a2
  (在页面后面这里会有空行占位)
c1 c2 (这里是第二页了)
d1 d2
我的目的是实现下面这种效果:
content1 content2
a1 a2
c1 c2
d1 d2 (这里是第二页了)

大家碰到过这种问题的都来说说,说说你们是怎么处理的???或者给个思路。

[解决办法]
先用GroupingStore进行该字段的分组,然后写个聚合函数就可以了,然后点击的话在重新加载数据,如果是grid显示的话可以直接用pivotgrid,稍微修改一下可以用,用groupingstore时注意要显式指定reader:new Ext.data.JsonReader({});
必须指定sortInfo;版本是3.3.0.


JScript code
app.ux.AggregateStore=Ext.extend(Ext.data.GroupingStore,{    summaryField:null,    constructor:function(config){        Ext.apply(this,config);                app.ux.AggregateStore.superclass.constructor.call(this);        this.on('load',this.aggregate,this);    },    aggregate:function(){        var rec=null;                this.each(function(record){            if(rec==null||rec.data[this.groupField]!=record.data[this.groupField]){                /////针对特定项目的处理                if(record.data.salePrice==undefined||record.data.salePrice==0){                    record.data.salePrice=record.data.price;                }                record.data.profit=(record.data.salePrice-record.data.price)*record.data.quantity;                //////////通用代码                rec=record;                return;            }                        if(rec.data[this.groupField]==record.data[this.groupField]){                /////针对特定项目的处理                var currentTotal=record.data.total;                record.data.profit=(record.data.salePrice-record.data.price)*record.data.quantity;                record.data.profit+=rec.data.profit;                record.data[this.summaryField]+=rec.data[this.summaryField];                record.data.quantity+=rec.data.quantity;                /////////////通用代码                this.remove(rec);                rec=record;                                            }                    },this); 

热点排行