我正在使用 handsontable js插件。我想在 getCellMeta Hook 中使用 afterChange 函数,但不起作用。
我在使用函数后的afterChange钩子(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);
我在afterChange之后尝试了输出控制台日志;
在afterChange中使用输出控制台日志;
更改后如何获取细胞元?
谢谢。
最佳答案
您快要准备好了,回调中只有一个小错误:doc for afterChange
指定回调的第一个参数(changes
)是:
因此,有2个重要的细节:
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控制台,在表中进行任何更改。
关于javascript - 如何在Handsontable的afterChange中使用getCellMeta?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47965692/