在 Handsontable 单元格中加载数组

Posted

技术标签:

【中文标题】在 Handsontable 单元格中加载数组【英文标题】:Load array in Handsontable cell 【发布时间】:2018-02-09 01:53:48 【问题描述】:

在更改一个cell 中的值时,我必须在另一个单元格中加载array of values(作为下拉菜单)。

我不知道如何在单元格中加载数组。

我尝试的是:

afterChange: function(changes, source) 
        if(!changes) 
        return;
      
      $.each(changes, function(index, element) 
       var row = element[0];
       var col = element[1];
       var oldVal = element[2];
       var newVal = element[3];
       if(col==6) 
         tsContainer.setDataAtCell(row, 1, pjtArray);    
       
      );
    

这里我使用setDataAtCell 方法,它将数组加载为字符串(逗号分隔)。

我试过了

     var arr = [['123'],['dfg'],['678'],['asd']];
     tsContainer.populateFromArray(row, 1, arr);

但它会加载每个单元格中的每个元素的数组。

我必须在一个单元格中显示所有元素作为下拉菜单。

handsontbale 列属性中,我们可以将数组设置为source。我需要这样的东西。

由于数据是动态加载的,我必须在afterChange 事件中写下这个。

请帮帮我..

【问题讨论】:

【参考方案1】:

您的猜测是正确的,您需要更改列的属性源来修改下拉值。

让我们采用以下初始数据集:

myData = [
    ['source1', 'option1'],
    ['source1', 'option3'],
    ['source2', 'option5'],
    ['source2', 'option7']
],

以及以下下拉值:

selectSource = ['source1','source2'],
source1 = ['option1','option2','option3','option4'],
source2 = ['option5','option6','option7','option8'],

假设您要根据第 1 列的值修改第 2 列的下拉值。(如果第 1 列等于 'source1',则第 2 列的下拉值将是数组 source1,如果它等于 ' source2',第 2 列的源将是数组 source2) :

    使用 getCellMeta(row,column) 获取单元格的属性 访问源并为您的新阵列更改它

参数row是你触发afterChange事件的当前行,value是该行第1列的值:

function setDropDownSource(row, value) 
    var instance = this;
    var cellPropertiesOption = instance.getCellMeta(row,1); // Column 1 is your 2nd column
    if (value == 'source1')
        cellPropertiesOption.source = source1;
    else if (value == 'source2')
        cellPropertiesOption.source = source2;
    else
        cellPropertiesOption.source = null;

该函数在 afterChange 事件中调用如下:

$.each(changes, function (index, element) 
    var rowIndex = element[0];
    var columnIndex = element[1];
    var newValue = element[3];

    if (columnIndex == 0)  // Checking if the event has been triggered within the column SourceSelector
        setDropDownSource.call(instance, rowIndex, newValue);
        instance.render();
    
);

我还添加了一个 afterLoadData 事件,以便在加载页面时为第二列的每一行设置源。但是我还想在源更改时清空单元格的当前值。因此,您将找到一个附加参数,用于在更改源时设置单元格是否需要为空的条件:

if (!init)
    instance.setDataAtCell(row,1,"");

您可以在 this JSFiddle 中找到完整的工作示例。

【讨论】:

以上是关于在 Handsontable 单元格中加载数组的主要内容,如果未能解决你的问题,请参考以下文章

Handsontable:在运行时更新单元格渲染器

填充单元格后如何在单元格中加载/显示 UIImageView

如何在表格视图单元格中加载内容视图?

使用自动布局在某些单元格中加载图像

在一个单元格中加载多个 Xib 视图

CollectionView 单元格未在视图控制器中加载