store.load 后的 Extjs 网格选择有不正确的数据

Posted

技术标签:

【中文标题】store.load 后的 Extjs 网格选择有不正确的数据【英文标题】:Extjs grid selection after store.load has incorrect data 【发布时间】:2017-02-08 18:59:08 【问题描述】:

在 ExtJS 4.2 中 我有一个带有远程负载记录的网格。我在网格中选择一行并在数据库中更新它。我正在更新数据库中的一条记录并使用 store.load() 重新加载存储。发生这种情况后,我可以在调试器中暂停并检查存储,它确实具有正确的值。仍然选择相同的记录,但代码如下:

var selectedRecords = grid.getSelectionModel().getSelection();

没有得到更新的记录。如果我取消选择并重新选择它,则会刷新记录,但如果不这样做,它仍然具有旧值。有没有办法刷新它。

我看到很多关于让行在加载时保持选中状态的帖子,但这对我来说不是问题,它似乎是自己做的。

【问题讨论】:

我相信 ext js 4.2 有这个错误.. 你需要取消选择并选择 【参考方案1】:

这似乎是选择模型底层的一个错误。 'selected' 混合集合不会因为 Ext.selection.Model 扩展 Ext.util.Observable 而更新,并且仅在与网格选择相关的某些事件发生时才会更新。如果您不想取消选择然后手动选择,甚至不想在商店加载时注册回调,请尝试以下解决方法,

var selectionArr = grid.selModel.selected; selectionArr.replace(selectionArr.keys[0],grid.getStore().getById(selectionArr.keys[0]));

现在试试,

var selectedRecords = grid.selModel.getSelection();

应该可以正常工作。

【讨论】:

@tgreen :如果它对您有用,请将其标记为答案。 这是我使用的代码:activeGridpanel.store.addListener('load', function (store) var selectionArr = activeGridpanel.selModel.selected; selectionArr.keys.forEach(function(key) selectionArr.replace(key, store.getById(key)); ) )【参考方案2】:

更新值后尝试刷新网格存储。

Ext.getCmp('myGridID').getView().refresh()

【讨论】:

刷新视图不能解决问题。 是的,我试过了,但是没有用。我认为 Surya 可能是正确的

以上是关于store.load 后的 Extjs 网格选择有不正确的数据的主要内容,如果未能解决你的问题,请参考以下文章

重用或创建新的 Store - ExtJS 4

带有 Ext JS 的 MVC 架构中 store.load() 的动态代理 URL

ExtJS 4 - 如何加载带有来自表单的最新值的参数的网格存储?

ExtJS.data.store.load 回调之外的空值

extjs store.load 未填充,可能是根对象问题?

ExtJS 4(MVC)商店不使用我的自定义模型类