我正在使用insertPre插件。我不使用SAVE按钮并依赖CKEditor始终保持我的后端数据同步。
当用户将数据输入insertPre插件然后单击“确定”时,insertPre的内容将移动到主编辑区域。
但是我使用的是AngularJS,我需要在insertPre返回时更新后端数据对象。这是我的解决方案,但我不确定它是一个好的:
ck.on('insertElement', function () {
//$scope.$apply(function () {
// ngModel.$setViewValue(ck.getData());
//});
setTimeout(function () {
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
});
}, 2000);
});
等待两秒钟让CKEditor的textarea完全更新然后对我的支持数据字段进行更新似乎很麻烦。
有没有人有任何其他建议的解决方案。理想情况下,我希望能够在insertElement更新屏幕后触发某些事件。
请注意,我已尝试过以下操作,但这不起作用,因为我猜它没有被解雇。
ck.on('pasteState', function () {
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
});
});
答案 0 :(得分:1)
我没有验证这一点,所以在接受之前进行测试,如果失败,我将删除此A.
我假设问题是当inertElement触发时,实际上没有发生变化?
如果您使用的是CKEditor 4.2+,则可以访问change event。我看到insertPre只是4.1,但我想知道insertElement是否在内部完成后触发了change事件,对我来说这似乎是理性的。所以你可以尝试这样的事情并按照控制台查看它发射的频率。
ck.on('change', function () {
console.log('change event!');
$scope.$apply(function () {
ngModel.$setViewValue(ck.getData());
});
});
如果经常发生这种情况,只需在每次发生此事件时重置500毫秒左右的计时器,并且只有在它结束后才会更新模型 - 这样您就不会削弱后端/性能。