找回密码
 立即注册

QQ登录

只需一步,快速开始

mtkj
金牌服务用户   /  发表于:2020-4-29 11:49  /   查看:3449  /  回复:1
本帖最后由 mtkj 于 2020-4-29 12:21 编辑

附件的JS已经上传

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

1 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-4-29 15:17:56
沙发
你好,这个问题实际上就是一个对象引用的问题,在JS中,要复制一个对象(包括数组),不能仅仅创建一个引用,而是要深度克隆,您代码里只是把get到的viewrow直接放到dataSource中,这样dataSource的两个位置引用的完全是同一个数据。解决方法参考下方代码:

  1. var grid = theGrid
  2. var rowsd = grid.selection.row;
  3. var viewrow = grid.itemsSource.items[rowsd];
  4. var view = grid.itemsSource
  5. // 这里需要克隆一个全新的viewrow
  6. view.sourceCollection.splice(rowsd+1,0,clone(viewrow));
  7. view.refresh();
  8. var col = grid.columns[grid.selection.col];
  9. grid.setCellData(rowsd+1, col.index, "");

  10. function clone(Obj){
  11.         var buf;
  12.         if(Obj instanceof Array){
  13.                 buf=[];
  14.                 var i=Obj.length;
  15.                 while(i--){
  16.                         buf[i]=clone(Obj[i]);
  17.                 }
  18.                 return buf;
  19.         }
  20.         else if(Obj instanceof Object){
  21.                 buf={};
  22.                 for(var k in Obj){
  23.                         buf[k]=clone(Obj[k]);
  24.                 }
  25.                 return buf;
  26.         }else{
  27.                 return Obj;
  28.         }
  29. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部