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 网格选择有不正确的数据的主要内容,如果未能解决你的问题,请参考以下文章
带有 Ext JS 的 MVC 架构中 store.load() 的动态代理 URL
ExtJS 4 - 如何加载带有来自表单的最新值的参数的网格存储?