刷新 extjs 网格中选定的行后记住
我有一个问题。我使用 extjs grid
。该网格将每秒
刷新一次。
我用这个函数刷新:
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: {
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'
}]
});
谢谢大家
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我编写了简单的 Ext.grid.Panel 自动扩展选择存储重新加载之前选择的后行。你可以在这个jsFiddle中尝试一下
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
最简单的解决方案就是将所选行的 js 索引保存在某处。然后重新加载后,您可以使用网格的选择模型通过索引轻松选择此行。
获取选择模型: http://docs.sencha .com/ext-js/4-0/#!/api/Ext.grid.Panel-method-getSelectionModel
获取选定的行:http://docs.sencha.com/ext-js /4-0/#!/api/Ext.selection.Model-method-getSelection
将所选行设置回来:http://docs.sencha.com/ext-js /4-0/#!/api/Ext.selection.模型方法选择
The straightforward solution is just save somewhere in js index of selected row. Then after reload you could easily select this row by index using grid's selection model.
Get selection model: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.grid.Panel-method-getSelectionModel
Get selected rows: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.selection.Model-method-getSelection
Set selected row back: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.selection.Model-method-select
这是选择先前选择的记录的另一种方法:
由于某种原因, grid.getSelectionModel().select(record) 方法对我不起作用,但按索引选择似乎有效。
编辑:找出为什么 grid.getSelectionModel().select(record) 方法不起作用。显然,商店已重新加载,记录实例不相同(它们具有不同的自动生成的 Ext ID)。在这种情况下,您必须使用 selectAt()。
Here is another way to select the previously selected record:
For some reason the grid.getSelectionModel().select(record) method wasn't working for me, but selecting by index seems to work.
Edit: found out why grid.getSelectionModel().select(record) method wasn't working. Apparently the store is reloaded, the record instances aren't the same (they have different automatically generated Ext IDs). You have to use selectAt() in this case.
对于 extjs 4.1.7 用户
需要一个关于以下语句的解决方法
因此 setScrollTop 不再存在,
因此添加了一个工作解决方案
me.getView().preserveScrollOnRefresh = true;
在初始化组件中
for extjs 4.1.7 users
need a workarround about the statement in
thus setScrollTop no longer exists
so a working soluction is add
me.getView().preserveScrollOnRefresh = true;
in initComponent
我已经对此代码进行了修改。
如果您进行选择,并在存储上应用过滤器并重新加载它,则选择模型在此选定集合中具有第一个空数组(位于索引 0 处)。
此修改位于“refreshSelection”函数的最后一行。
i have make modification on this code.
If you make selection, and aplys a filter on the store and reload it, the selection model have a first empty array in this selected collection ( at index 0 ).
This modification is in the last line of the "refreshSelection" function.