Records.slice不会对已排序的商店进行切片

时间:2012-11-06 11:56:18

标签: javascript sorting extjs slice jsonstore

我有一个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);
                        }
                    },

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

1 个答案:

答案 0 :(得分: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;

它有效!