我正在使用 handsontable js插件。我想在 getCellMeta 挂钩中使用 afterChange 功能,但无效。 我在使用函数outChange hook后,函数正常工作。但是没有在afterChange hook中工作。
var container = document.getElementById('t1'),
options = document.querySelectorAll('.options input'),
table,
hot;
hot = new Handsontable(container, {
autoWrapRow: true,
startRows: 81,
startCols: 206,
autoColumnSize : true,
stretchH: 'all',
afterChange : function(change,source) {
if (source === 'loadData') {
return;
}
var test = this.getCellMeta(change[0],change[1]); // not working, not return "id" meta
console.log(test);
}
});
$.ajax({
url: 'path',
type: 'GET',
dataType: 'json',
success: function (res) {
var data = [], row, pc = 0;
for (var i = 0, ilen = hot.countRows(); i < ilen; i++)
{
row = [];
for (var ii = 0; ii<hot.countCols(); ii++)
{
hot.setCellMeta(i,ii,'id',res[pc].id);
row[ii] = res[pc].price;
if(pc < (res.length-1)) {
pc++;
}
}
data[i] = row;
}
hot.loadData(data);
}
});
var test = this.getCellMeta(0,0); // is working, return "id" meta
console.log(test);
如何在更改后获取单元元数据?
感谢。
答案 0 :(得分:4)
你几乎就在那里,你的回调中只有一个小错误:doc for afterChange
指定回调的第一个参数(changes
)是:
包含有关每个已编辑单元格的信息的2D数组
[[row, prop, oldVal, newVal], ...]
。
所以,有两个重要的细节:
hot.getCellMeta(change[0][0],change[0][1])
例如hot
而非this
,因为afterChange
回调函数是从不同的上下文(即在不同的对象上)调用的,因此this
不是正确的目标有关通话,请参阅How does the "this" keyword work? 读取整个更改数组的示例:
var hot = new Handsontable(container, {
/* rest of init... */
afterChange : function(changes,source) {
console.log("Changes:", changes, source);
if (changes) {
changes.forEach(function(change) {
var test = hot.getCellMeta(change[0],change[1]);
console.log(test.id, test); // 'id' is the property you've added earlier with setMeta
});
}
}
});
请参阅demo fiddle,打开JS控制台,在表格中进行任何更改。