在Handsontable上如何禁用“编辑”功能。通过< setDataAtCell'更新单元格的操作来自' copyPaste'事件

时间:2015-08-19 07:41:12

标签: handsontable

我正在使用带有php的Handsontable电子表格控件和保存在mongodb中的数据。 当复制粘贴一大堆关于控制的数据时,' afterChage'事件触发器使用source作为' paste'。在这里我试图使用函数instance.setDataAtCell(rowIndex,0,vRowId)更新特定单元格(0)上的值(RowID)

 afterChange: function(changes, source) {

   console.log('Trigrd>>');
   console.log('Source:'+source);
   console.log('Changes:'+changes);
   if (source  == 'paste' || source  == 'autofill' || (changes.length >1 )) {
     var minVal            = changes[0][0];
     var maxVal            = changes[chLength][0];

     for(var modifyRowIndex = minVal; modifyRowIndex <= maxVal ;modifyRowIndex++){
        var xrowId          = Math.random();
        instance.setDataAtCell(modifyRowIndex, 0, xrowId, 'program');
     }
   }

 }

如果我尝试在电子表格上粘贴两行数据,在控制台上我们可以看到afterChange函数被触发3次。

Trigrd>>
Source:paste
Changes:[[0,1,'','xxxx'],[1,1,'','yyyy']]
Trigrd>>
Source:edit
Changes:[0,0,'','1232']
Trigrd>>
Source:edit
Changes:[1,0,'','23434']

第一个触发器是动作&#39;粘贴&#39;剩下的两个触发器是由于命令&quot; setDataAtCell&#39;。这会使整个copyPaste操作延迟。有时它会遇到大数据copyPaste

任何人都有任何想法跳过编辑&#39;循环在这里。

1 个答案:

答案 0 :(得分:1)

如果您仍在寻找解决方案,我认为这会对您有所帮助。

我遇到了与您类似的问题,我设法通过beforeChange而不是afterChange进行修改来解决问题:

beforeChange : function(changes, source){
    if (source  == 'paste'){
        var nrChanges = changes.length;
        for (var i = 0; i < nrChanges; i++)
            if (changes[i][1] == _CB) // get cell where you want to control
                changes[i][3] = false; // here you add your value
    }
}

并在afterChange上,您将获得您设置的值...