4

我该怎么办?

通过使用与我的模型匹配textarea的属性和带有to call的标签,我能够将数据输入 CKEditor 。namescriptng:bind-templateCKEDITOR.replace

然后我制作了一个 CKEditor 插件来检测更改并将它们写回textarea. 问题是textarea当 CKEditor 初始化并且 CKEditor 没有拾取对textarea. 这让我觉得我以错误的方式接近这个问题。

接下来,我尝试ng:eval-order="LAST" ng:eval="setupCKEditor()"从函数中使用和设置编辑器setupCKEditor()。这不起作用,因为即使ng:eval-order="LAST"在创建节点之前该函数仍在运行。

我发现在帮助setTimeout(function () {...},0)周围添加一个。CKEDITOR.replace现在唯一的问题是,当它更改模型时,它不会重新绘制屏幕,​​直到编辑另一个字段。

scope.$root.$eval();似乎解决了这个问题。

更新

我们最终放弃了这个,因为我们永远无法让它可靠地工作。我们切换到带有 Angular-UI的 TinyMCE 一段时间,然后最终构建了一些自定义的东西。

4

2 回答 2

0

此类适用于来自http://alfonsoml.blogspot.com/2011/03/onchange-event-for-ckeditor.htmlonchange的插件。

angular.directive("my:ckeditor", function (expression, compiledElement) {
    return function fn(element) {
        var scope = this;

        setTimeout(function () {
            CKEDITOR.replace("editor-" + index, {extraPlugins: 'onchange'});

            scope.$watch("layers[" + index + "].src", function () {
                if (!CKEDITOR.instances["editor-" + index]) return;
                if (scope[expression] == CKEDITOR.instances["editor-" + index].getData()) return;
                CKEDITOR.instances["editor-" + index].setData(scope[expression]);
            });

            CKEDITOR.instances["editor-" + index].on("change", function () {
                scope[expression] = CKEDITOR.instances["editor-" + index].getData();
                scope.$root.$eval();
            });
        }, 0);
    };
});

更新

这只在 v0.10.6 上测试过

于 2011-10-24T14:12:06.587 回答
0

为了完整起见,附加了一个提供角度指令的模块。我还没有使用它,所以我无法评论它的工作/集成情况。

于 2014-01-08T05:11:14.697 回答