我有网格面板和一个按钮
当我单击按钮时,它将通过ajax传输数据,完成网格后将重新加载。
我尝试重新选择行(在这里我给你的例子是第一行),但无论如何它不起作用
Ext.Ajax.request({
url: ...,
params: {
v: ...
},
success: function(response){
grid.store.load();
grid.getSelectionModel().select(0, true); // example first row
}
})
答案 0 :(得分:9)
尝试在回调中选择行
grid.store.load({
scope:this,
callback:function(records, operation, success){
grid.getSelectionModel().select(0, true);
}
});
或
grid.store.load(function(records, operation, success){
grid.getSelectionModel().select(0, true);
});
答案 1 :(得分:3)
通过应用以下覆盖,您可以使行选择在商店重新加载中继续存在:
Ext.override(Ext.view.View, {
preserveSelectionOnRefresh: true,
constructor: function() {
this.callOverridden(arguments);
if (this.preserveSelectionOnRefresh) {
this.mon(this.getStore(), {
beforeload: this.beforeStoreLoadPreserveSelectionRoutine,
scope: this
});
}
},
beforeStoreLoadPreserveSelectionRoutine: function() {
var sm = this.getSelectionModel(),
selection = sm.getSelection(),
i = 0,
l = selection.length,
savedSelection = [];
delete sm.savedSelection;
for (; i < l; i++) {
savedSelection.push(selection[i].getId());
}
if (savedSelection.length) {
sm.savedSelection = savedSelection;
}
}
});
Ext.override(Ext.selection.Model, {
refresh: function() {
// include selections saved across store reloads
if (this.savedSelection && this.savedSelection.length) {
var rs = [],
r,
j = 0,
l = this.savedSelection.length;
for (; j < l; j++) {
r = this.store.getById(this.savedSelection[j]);
if (r) {
rs.push(r);
}
}
if (rs.length) {
this.select(rs, false, true);
}
}
this.callOverridden();
delete this.savedSelection;
}
});
他们所做的只是在重新加载商店之前保存所选内容,并确保在刷新视图后再次选择这些记录。在Ext JS 4.1.2上测试。
答案 2 :(得分:2)
...如果你使用缓冲存储和Ext JS 4.2+,你可以使用scrollTo函数,它选择AND滚动视图到你的选择:
grid.store.load(function(records, operation, success){
grid.view.bufferedRenderer.scrollTo(0, true);
});
答案 3 :(得分:2)
通过添加回调加载商店后选择行:
grid.store.load(function(records, operation, success) {
grid.getView().select(0);
});
答案 4 :(得分:2)
grid.store.load ==&gt; grid.store.on
答案 5 :(得分:0)
在回复时,也许您可以使用字段来区分它:
Sencha 4.0.7:store finde
store.find(fieldName, value);
另一种方式,但我认为它在加载存储后不起作用,它的用途是:
Sencha:getLastSelected
grid.getSelectionModel().getLastSelected()
答案 6 :(得分:0)
这是一个为您照顾的插件:
https://github.com/roberto-rodriguez/ExtJs_GridMultipageSelectionPlugin
插件会在分页网格中的页面中保持选择。还包括一个名为:getSelection()的函数到网格,该函数返回一个包含所选行的ID的数组。
该插件假设有一个包含dataIndex的列:&#39; id&#39;
答案 7 :(得分:0)
如果您想选择上次选择的内容(不仅仅是接受的答案中显示的第一行),我认为这是最简单的:
grid.store.load(function() {
var view = grid.getView(),
selModel = grid.getSelectionModel(),
lastSelected = selModel.getLastSelected();
view.select(lastSelected);
});
或更好,是将来商店完成所有装载的监听器:
grid.store.on('load', function() {
var view = grid.getView(),
selModel = grid.getSelectionModel(),
lastSelected = selModel.getLastSelected();
view.select(lastSelected);
});
grid.store.load();
答案 8 :(得分:0)
我们在Sencha 5.0.1上遇到了同样的问题。我们发现可以通过在模型中添加idProperty来解决此问题。之后,您只需在商店中调用reload()函数即可。
在您的模型中:
idProperty: 'yourIdentifyingProperty',
然后
yourGrid.getStore().reload();
我不确定您是否还必须绑定网格的选择,但是如果上述方法不起作用,您也可以尝试这样做。