2

我正在使用 insertPre 插件。我不使用 SAVE 按钮,而是依靠 CKEditor 始终保持我的后端数据同步。

当用户在 insertPre 插件中输入数据然后单击 OK 时,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());
            });
        });
4

1 回答 1

1

我尚未对此进行验证,因此在接受之前进行测试,如果失败,我将删除此 A。

我假设问题是在 inertElement 触发时实际上并未发生更改?

如果您使用的是 CKEditor 4.2+,您可以访问更改事件。我看到 insertPre 只是 4.1,但我想知道 insertElement 在完成后是否会在内部触发更改事件,对我来说这似乎是合理的。所以你可以尝试这样的事情并按照控制台查看它的触发频率。

ck.on('change', function () {
    console.log('change event!');
    $scope.$apply(function () {
        ngModel.$setViewValue(ck.getData());
    });
});

如果它太频繁,只需在每次发生此事件时重置一个 500 毫秒左右的计时器来延迟,并且只有在它结束后才更新模型 - 这样您就不会削弱您的后端/性能。

于 2013-09-26T09:38:46.297 回答