编辑手部网格的单元格属性

时间:2015-07-27 13:52:29

标签: javascript handsontable

我有一个Handsontable网格,用户将输入一些值以将其插入数据库中。当他提交网格时,我希望特定细胞是" readOnly"。在这种情况下,我希望第一列是" readOnly"。

我使用Ajax在我的数据库中发送数据。在我的回调函数中,我想将单元格属性编辑为" readOnly"。

所以我现在拥有的是:

var cellProperties={};
    var i;
    for (var i = 0; i < data_traitement.length; i++) {

        cellProperties.readOnly = true;
        return cellProperties;
    }

但&#34; cellProperties&#34;选项只能在Handsontable定义中使用。所以我不知道该怎么做才能做到这一点。

有人能帮助我吗?

编辑:

根据ZekeDroid的建议,我尝试修改我的单元格定义: 所以我得到了这个:

cells:function(row,col,prop){
    var cellProperties = {};

    if ([0].indexOf(row) !== -1 && col >= 0) 
    {
        cellProperties.readOnly = true;
    }

    if (readOnlyCells[[row,col]]) {
        cellProperties.readOnly = true;
    }

    return cellProperties;
    }

在我的回调函数中,如果我理解得很清楚,我必须将此readOnlyCells更改为true

所以我做了这个:

for (var i = 0; i < data_traitement.length; i++) {
        readOnlyCells[[i,0]] = true; //I'm not sure of this line

    }
    hot.render();

2 个答案:

答案 0 :(得分:1)

如果您设置了columns选项,则可以使用HOT实例和函数updateSettings()更新选项。它会像这样工作:

hot.updateSettings({
    columns: newColumns
});

在您的情况下,newColumns应该是列的新定义。我建议创建一个返回这个新对象的函数。此对象将在文档页面中定义。在您的ajax回调中,您需要确保此新定义的第一列为readOnly:true并且您已完成!

如果你只想做细胞,它可能比这更容易。您可以像这样保留单元格坐标的地图:

var readOnlyCells = {};

然后在回调中,添加键值对单元格坐标:readOnlyCells[[row,col]] = true。在此之后,您应该确保您的初始cells定义如下:

cells: function(row, col, prop) {
    var cellProperties = {};

    if (readOnlyCells[[row,col]]) {
        cellProperties.readOnly = true;
    }

    return cellProperties;
}

就是这样。您可能希望像列一样更新设置,但不需要更改代码。

答案 1 :(得分:1)

您可以尝试为此列实现自定义渲染器吗?然后,您可以控制该列中每个单元格的只读。

示例:

function customReadOnlyRenderer(instance, td, row, col, prop, value, cellProperties) {

    // your business logic to determine read only property of the cell
    cellProperties.readOnly = true or false;
    Handsontable.TextCell.renderer.apply(this, arguments);
}

在您的ajax调用之后,您更新数据源并调用渲染。将使用源中的最新数据为此列上的每个单元格调用渲染器。