You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:30:40