Handsontable:事件触发器上的setDataAtCell
Handsontable: setDataAtCell on the trigger of an event
我是 Javascript 的 handsontable 库的新手,如果问题看起来太基础,我深表歉意。
我想做的是,如果有人写入/更改了 table 第一行中写入的数据,第 5 列和第 5 行单元格中的值应设置为“已更改” ”。我知道要设置一个值,我需要使用 hot.setDataAtCell(5,5,"changed")
。我不知道的是如何触发此命令,即我需要找到一种方法来识别何时更改了列第一行中的任何单元格。我已经尝试覆盖 afterChange
回调,但代码一直挂起。
这应该可以解决您的问题,
示例:
var cellChanges = [];
$(document).ready(function () {
var myData = [{
0: 'aaaaaaaaaaaaa',
1: 'bbbbbbbbb',
2: 'ccccccc'
}, {
0: 'aaaa',
1: 'b',
2: 'bbbb'
}, {
0: 'aaaa',
1: 'x',
2: 'bbbb'
}, {
0: 'aaaa',
1: 'w',
2: 'bbbb'
}, ];
$("#editOrders").handsontable({
data: myData,
autoWrapRow: true,
minSpareRows: true,
columnSorting: true,
fillHandle: false,
currentRowClassName: 'currentRow',
colHeaders: ["demo", "demo", "demo"],
afterChange: function (changes, source) {
if (!changes) {
return;
}
$.each(changes, function (index, element) {
var change = element;
var rowIndex = change[0];
var columnIndex = change[1];
var oldValue = change[2];
var newValue = change[3];
var cellChange = {
'rowIndex': rowIndex,
'columnIndex': columnIndex
};
if(oldValue != newValue){
cellChanges.push(cellChange);
}
});
},
afterRender: function () {
var instance = $('#editOrders').handsontable('getInstance');
$.each(cellChanges, function (index, element) {
var cellChange = element;
var rowIndex = cellChange['rowIndex'];
var columnIndex = cellChange['columnIndex'];
var cell = instance.getCell(rowIndex, columnIndex);
var foreColor = '#000';
var backgroundColor = '#ff00dd';
cell.style.color = foreColor;
cell.style.background = backgroundColor;
});
},
columns: [{
//LINE
data: 0
}, {
//LINE
data: 1
}, {
//LINE
data: 2
},
]
});
});
这是 jsfiddle 的 link;
http://jsfiddle.net/8hv4z/18/
setDataAtCell()
似乎在 afterChange 回调函数中不起作用。
方法是在像 data: mydata 这样初始化 handsontable 时使用数据的初始化变量,然后 afterChange 函数应该如下所示:
afterChange: function (changes, source) {
mydata[5][5]="changed";
this.render();
}
我是 Javascript 的 handsontable 库的新手,如果问题看起来太基础,我深表歉意。
我想做的是,如果有人写入/更改了 table 第一行中写入的数据,第 5 列和第 5 行单元格中的值应设置为“已更改” ”。我知道要设置一个值,我需要使用 hot.setDataAtCell(5,5,"changed")
。我不知道的是如何触发此命令,即我需要找到一种方法来识别何时更改了列第一行中的任何单元格。我已经尝试覆盖 afterChange
回调,但代码一直挂起。
这应该可以解决您的问题,
示例:
var cellChanges = [];
$(document).ready(function () {
var myData = [{
0: 'aaaaaaaaaaaaa',
1: 'bbbbbbbbb',
2: 'ccccccc'
}, {
0: 'aaaa',
1: 'b',
2: 'bbbb'
}, {
0: 'aaaa',
1: 'x',
2: 'bbbb'
}, {
0: 'aaaa',
1: 'w',
2: 'bbbb'
}, ];
$("#editOrders").handsontable({
data: myData,
autoWrapRow: true,
minSpareRows: true,
columnSorting: true,
fillHandle: false,
currentRowClassName: 'currentRow',
colHeaders: ["demo", "demo", "demo"],
afterChange: function (changes, source) {
if (!changes) {
return;
}
$.each(changes, function (index, element) {
var change = element;
var rowIndex = change[0];
var columnIndex = change[1];
var oldValue = change[2];
var newValue = change[3];
var cellChange = {
'rowIndex': rowIndex,
'columnIndex': columnIndex
};
if(oldValue != newValue){
cellChanges.push(cellChange);
}
});
},
afterRender: function () {
var instance = $('#editOrders').handsontable('getInstance');
$.each(cellChanges, function (index, element) {
var cellChange = element;
var rowIndex = cellChange['rowIndex'];
var columnIndex = cellChange['columnIndex'];
var cell = instance.getCell(rowIndex, columnIndex);
var foreColor = '#000';
var backgroundColor = '#ff00dd';
cell.style.color = foreColor;
cell.style.background = backgroundColor;
});
},
columns: [{
//LINE
data: 0
}, {
//LINE
data: 1
}, {
//LINE
data: 2
},
]
});
});
这是 jsfiddle 的 link;
http://jsfiddle.net/8hv4z/18/
setDataAtCell()
似乎在 afterChange 回调函数中不起作用。
方法是在像 data: mydata 这样初始化 handsontable 时使用数据的初始化变量,然后 afterChange 函数应该如下所示:
afterChange: function (changes, source) {
mydata[5][5]="changed";
this.render();
}