4

これについてはどうすればよいですか?

textareaモデルに一致するname属性とを呼び出すscriptタグを使用して、データをCKEditorに取り込むことができました。ng:bind-templateCKEDITOR.replace

次に、変更を検出してに書き戻すCKEditorプラグインを作成しましたtextarea。問題は、textareaCKEditorが初期化され、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 に答える