这是一种不使用间隔的替代方法。每次按下一个键,启动 1 秒超时,然后执行更新。如果某个键被按下的频率超过 1 秒,使其太快,只需重置计时器。您也可以对其他事件使用相同的计时器和相同的更新功能,使其具有可扩展性。
function update() {
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
console.log("Updating the model - key - " + attr['name']);
});
}
var timeout = 1000, timer;
ck.on('key', function () {
clearTimeout(timer);
timer = setTimeout(function() {
update();
}, timeout);
});
或者,如果您想在按下某个键时每 n 秒更新一次,您可以执行以下操作。
var timeout = 1000, timer, updating = false;
function update() {
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
console.log("Updating the model - key - " + attr['name']);
updating = false;
});
}
ck.on('key', function () {
if (updating === true) return;
updating = true;
timer = setTimeout(function() {
update();
}, timeout);
});
但是,如果您需要检查内容是否已更改,而不是是否按下某个键,则可以使用ck.checkDirty()
andck.resetDirty()
结合时间间隔进行检查。还有一个change
事件,但我没有测试过。有许多不同的内容更改不会触发key
事件,例如将某些文本加粗、通过图标添加图像或 HR、更改表格属性以及拖动图像。