记住在extjs网格中刷新所选行之后 [英] remember after refresh selected row in extjs grid

查看:227
本文介绍了记住在extjs网格中刷新所选行之后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题。我使用extjs网格。此网格将每秒钟刷新一次。我刷新了这个功能:

  ND.refresh = function(){
ND.commList.load();
}


var refreshSeconds = refreshRate * 1000;
var t = setInterval('ND.refresh()',refreshSeconds);

但是当有人选择了一行来突出显示时,它会重置此选择。我如何记住所选的行,刷新后再次突出显示?



这是我的网格:

  var grid = Ext.create('Ext.grid.Panel',{
autoscroll:true,
region:'center',
store:ND。 dashBoardDataStore,
stateful:true,
forceFit:true,
loadMask:false,
stateId:'stateGrid',

viewConfig:{
条纹路径:true
},
列:[{
文本:车辆,
可排序:真,
灵活:1,
宽度: 60,
dataIndex:'vehicle'
},{
text:'CCU',
可排序:true,
flexible:0,
width: 50,
renderer:status,
dataIndex:'ccuStatus'
}]
})

感谢你们

解决方案

我写了简单的 Ext.grid.Panel 扩展,自动选择在重新加载存储之前选择的行。您可以在此jsFiddle

  Ext.define('PersistantSelectionGridPanel',{
extends:'Ext.grid.Panel',
selectedRecords:[],
initComponent:function(){
this.callParent(arguments);

this.getStore()。on('beforeload',this.rememberSelection,this);
this.getView()。on('refresh' this.refreshSelection,this);
},
rememberSelection:function(selModel,selectedRecords){
if(!this.rendered || Ext.isEmpty(this.el)){
return;
}

this.selectedRecords = this.getSelectionModel()。getSelection();
this.getView()。saveScrollState();
} ,
refreshSelection:function(){
if(0> = this.selectedRecords.length){
return;
}

var newRecordsToSelect = [];
for(var i = 0; i < this.selectedRecords.length; i ++){
record = this.getStore()。getById(this.selectedRecords [i] .getId());
if(!Ext.isEmpty(record)){
newRecordsToSelect.push(record);
}
}

this.getSelectionModel()。select(newRecordsToSelect);
Ext.defer(this.setScrollTop,30,this,[this.getView()。scrollState.top]);
}
});


i have a problem. I use extjs grid. This grid will be refreshed every ** seconds. I refresh with this function:

ND.refresh = function () {
ND.commList.load();
}


var refreshSeconds = refreshRate * 1000;
var t = setInterval('ND.refresh()', refreshSeconds);

But when someone selected a row to highlight it it reset this selection. How can i remember the selected row and highlight it again after refresh?

this is my grid:

var grid = Ext.create('Ext.grid.Panel', {
    autoscroll: true,
    region: 'center',
    store: ND.dashBoardDataStore,
    stateful: true,
    forceFit: true,
    loadMask: false,
    stateId: 'stateGrid',

    viewConfig: {
        stripeRows: true
    },
    columns: [{
        text: 'Vehicle',
        sortable: true,
        flexible: 1,
        width: 60,
        dataIndex: 'vehicle'
    }, {
        text: 'CCU',
        sortable: true,
        flexible: 0,
        width: 50,
        renderer: status,
        dataIndex: 'ccuStatus'
    }]
})

Thanks guys

解决方案

I wrote simple Ext.grid.Panel extension that automatically selects back rows that were selected before store reload. You can try it in this jsFiddle

Ext.define('PersistantSelectionGridPanel', {
    extend: 'Ext.grid.Panel',
    selectedRecords: [],
    initComponent: function() {
        this.callParent(arguments);

        this.getStore().on('beforeload', this.rememberSelection, this);
        this.getView().on('refresh', this.refreshSelection, this);
    },
    rememberSelection: function(selModel, selectedRecords) {
        if (!this.rendered || Ext.isEmpty(this.el)) {
            return;
        }

        this.selectedRecords = this.getSelectionModel().getSelection();
        this.getView().saveScrollState();
    },
    refreshSelection: function() {
        if (0 >= this.selectedRecords.length) {
            return;
        }

        var newRecordsToSelect = [];
        for (var i = 0; i < this.selectedRecords.length; i++) {
            record = this.getStore().getById(this.selectedRecords[i].getId());
            if (!Ext.isEmpty(record)) {
                newRecordsToSelect.push(record);
            }
        }

        this.getSelectionModel().select(newRecordsToSelect);
        Ext.defer(this.setScrollTop, 30, this, [this.getView().scrollState.top]);
    }
});

这篇关于记住在extjs网格中刷新所选行之后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆