Ext JS 6.2.0:克隆行添加至Store后网格数据不显示问题求助
解决Ext JS克隆数据后网格不显示的问题
根据你提供的代码,问题主要出在几个关键操作上,对应修复方案如下:
核心问题分析
你仅将克隆记录添加到了insertedDynamicGrammarStore,但网格绑定的是dynamicGrammarGrid对应的主Store,主Store中没有这些克隆数据,所以网格无法显示。同时代码里存在破坏数据的错误操作。
具体修复步骤
1. 删除cloneGrammar.load()调用
在cloneRow分支中,cloneGrammar.load()会触发Store从数据源重新加载数据,直接清空你刚添加的克隆记录,这是导致数据丢失的关键,必须删除这行代码。
2. 将克隆记录同步添加到网格主Store
网格仅显示其绑定Store的数据,所以需要把克隆记录同时加到主Store,才能在网格中即时看到。
3. 正确创建Model实例(而非纯对象)
直接用Ext.apply得到的是普通对象,显式创建对应Model的实例能确保Store正确处理记录,同时要移除原记录的主键,避免主键冲突。
修改后的cloneRow分支代码
case 'cloneRow': { Ext.getCmp('dynamicGrammarSaveBtn').setDisabled(false); var cloneGrammar = Ext.data.StoreManager.lookup('insertedDynamicGrammarStore'); // 获取网格绑定的主Store var gridMainStore = Ext.getCmp('dynamicGrammarGrid').getStore(); result.forEach(function(item) { var originalRecord = item.data; // 克隆数据并移除主键(根据你的Model主键字段调整,比如id) var clonedData = Ext.apply({}, originalRecord); delete clonedData.id; // 创建Model实例,替换成你项目中对应的Model类名 var clonedRecord = Ext.create('YourApp.model.DynamicGrammar', clonedData); // 同时添加到临时存储和主Store cloneGrammar.add(clonedRecord); gridMainStore.add(clonedRecord); }); // 移除无用的refresh调用,Store数据变化后网格会自动更新 // Ext.getCmp('dynamicGrammarGrid').getView().refresh(); console.log(cloneGrammar.getData().items) Ext.getCmp('is_adding_row').setValue(Number(Ext.getCmp('is_adding_row').getValue()) - 1); ActionstoresTemp.addNewAction(result, "cloneRow"); break; }
额外说明
- Ext JS网格会自动监听绑定Store的数据变化,无需手动调用
refresh(),除非存在特殊视图渲染问题。 - 确保
insertedDynamicGrammarStore的model配置和网格主Store一致,保证记录类型匹配。 - 移除主键是为了避免和原记录主键重复,防止Store添加记录失败或后续后端保存时出现主键冲突。
内容的提问来源于stack exchange,提问作者user2107624
相关产品推荐
相关产品推荐

