0

我有一个jsonstore。

var speedDialStore = new Ext.data.JsonStore({
                pageSize: 4,
                proxy   : {
                    type: 'ajax',
                    url: 'speedDialListByHospitalID.html',
                    actionMethods: {
                        create: 'POST', read: 'POST', update: 'POST', destroy: 'POST'
                    },
                    reader: {
                        type: 'json',
                        root: 'results',
                        totalProperty: 'total',
                    }
                },
                fields      : [{name:"id"},{name:"code"},{name:"name"},{name:"description"},{name:"hospitalID"},{name: "buildingID"},{name: "floorID"},{name:"alarmID"},{name:"notificationFrequency"},{name:"maxCount"},{name:"start"}],
                listeners: {
                  load : function (store, records, success, operation, options) {
                    if(records != null){
                        store.loadData(records.slice(records[0].get('start'),records[0].get('start')+4));
                    }
                  } 
                }

            });

还有一个使用这家商店的网格。

我的问题是当对网格进行排序时,我需要对所有商店进行排序,并且只显示第一页的前 4 个元素和第二页的第二个 4 元素,依此类推..

listeners:{
                        'sortchange': function(ct, column, direction, eOpts ){
                                Ext.getCmp('speedDialPaging').moveFirst();
                                speedDialStore.sort(column.dataIndex, direction);
                        }
                    },

在 slice 方法起作用后,grid 仍然显示未排序的 4 个元素。但是,如果我在 slice 方法中添加警报消息或断点,我会看到存储已正确排序。因此(我认为)我需要修改 slice 方法或找到任何其他方法来解决这个问题。服务器正在发送所有数据。我们必须在这里解决这个问题,而不是服务器端。

4

1 回答 1

0

像这样更改商店侦听器,

listeners: {
                  load : function (store, records, success, operation, options) {
                    if(records != null && records.length > 0){
                        function compare(a,b) {
                          if (a.get(sortIndex) < b.get(sortIndex))
                             return -1;
                          if (a.get(sortIndex) > b.get(sortIndex))
                            return 1;
                          return 0;
                        }
                        records.sort(compare);
                        if(sortDirection == "DESC"){
                            records.reverse();
                        }
                        store.loadData(records.slice(records[0].get('start'),records[0].get('start')+4));
                    }
                  } 
                }

和这样的 sortchange 监听器,

 sortIndex = column.dataIndex;
 sortDirection = direction;

有用!

于 2012-11-07T13:09:19.947 回答