我在handsontable完成加载/初始化后尝试进行一些DOM操作。
Handsontable是否会在完成构建后触发某些事件?
答案 0 :(得分:10)
不再需要更改代码,因为有内置事件:
afterInit ()
- 启动Handsontable实例后触发回调。
afterLoadData ()
- 将新数据(通过loadData方法)加载到数据源数组中后触发回调。
afterRender ()
- 渲染Handsontable表后触发回调。
查看完整的活动列表see here
答案 1 :(得分:4)
我在github找不到任何此类回调,我认为你真的不需要回调。在调用$("#container").handsontable()
后,只需更改DOM即可。如果是因为你用ajax加载它,只需在完成时调用它。只需按照他们的例子here
<子> if (source === 'loadData') {...}
子>
如果您能够应对挑战,并且根据您下载的版本,我们可以深入了解源代码并自行进行一些调整,因为它非常简单。我假设你在handontable完成初始化后没有任何ajax加载就要求回调。
跟我来,让我们一起潜入。
jquery.handsontable.full.js
是的,就在设置之后,就在2165
行上,它说:
$.fn.handsontable = function (action) {...};
在那里,我们知道所有内容都已初始化,幸运的是,开发人员非常友好地评论和标记他的内容,所以让我们看看里面的行。
在线2182
上说:
instance = new Handsontable.Core($this, currentSettings);
他们在那里初始化核心内容,至少这是我能从名称中辨别的内容,因此在此行之后添加回调应该足以作为afterInit
回调。
因此,我们需要做的就是在用户提供的设置中添加对回调的检查,然后调用它。我决定在行2184
之后添加此回调,因为它是在实例化之后
你可以争论我把回调放在哪里以及它是否应该在Core
函数中,以及我如何检查设置是否是一个函数等,但是这样可以完成工作并且这样更容易子>
所以,在2182
[...]
instance = new Handsontable.Core($this, currentSettings); //<---- line 2182
$this.data("handsontable", instance);
instance.init(); //<---- line 2184
if(typeof(currentSettings.afterInit) == "function"){
currentSettings.afterInit();
}
[...]
那就是我们需要做的一切!现在我们可以使用afterInit
回调函数创建一个handontable。
$("#container").handsontable({
startRows: 8,
startCols: 6,
rowHeaders: true,
colHeaders: true,
minSpareRows: 1,
contextMenu: true,
afterInit: function(){
console.log("Handsontable initialized!");
}
});
不要害怕乱用源代码,你会学到很多东西!
以下是从包含2165
函数的2203
行到$.fn.handsontable
的完整更改代码:
$.fn.handsontable = function (action) {
var i, ilen, args, output = [], userSettings;
if (typeof action !== 'string') { //init
userSettings = action || {};
return this.each(function () {
var $this = $(this);
if ($this.data("handsontable")) {
instance = $this.data("handsontable");
instance.updateSettings(userSettings);
}
else {
var currentSettings = $.extend(true, {}, settings), instance;
for (i in userSettings) {
if (userSettings.hasOwnProperty(i)) {
currentSettings[i] = userSettings[i];
}
}
instance = new Handsontable.Core($this, currentSettings);
$this.data("handsontable", instance);
instance.init();
if(typeof(currentSettings.afterInit) == "function"){
currentSettings.afterInit();
}
}
});
}
else {
args = [];
if (arguments.length > 1) {
for (i = 1, ilen = arguments.length; i < ilen; i++) {
args.push(arguments[i]);
}
}
this.each(function () {
output = $(this).data("handsontable")[action].apply(this, args);
});
return output;
}
};