当insertPre插件返回并更新我的编辑区域时,如何更新我的支持数据对象?

时间:2013-09-22 11:57:29

标签: angularjs ckeditor

我正在使用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());
            });
        });

1 个答案:

答案 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毫秒左右的计时器,并且只有在它结束后才会更新模型 - 这样您就不会削弱后端/性能。