内联CKEditor与knockoutjs集成

jmo*_*era 6 jquery ckeditor knockout.js

所以我试图将CKEditor的内联编辑与Knockout.js集成.我能够成功加载CKEditor和knockout.js.

我似乎无法获得ko.observable更新属性:

<script type="text/javascript">

    var viewModel = function () {
        var self = this;
        self.editorText = ko.observable('ABC');
        self.testNewValue = function () {
            console.log(this.editorText());
        };
    }

    ko.applyBindings(new viewModel());
</script>
Run Code Online (Sandbox Code Playgroud)

这是html:

<div id="editable" contenteditable="true" data-bind="html: editorText">
</div>
<div>
    <input type="button" data-bind="click: testNewValue" value="test" />
</div>
Run Code Online (Sandbox Code Playgroud)

无论您是否更新,console.log结果始终显示"ABC".注意:我也试过了data-bind="text: editorText"

Jal*_*ayn 12

您必须编写自定义绑定处理程序,以便将可观察属性与CKEditor实例链接.

首先,您可以从此处找到的自定义绑定开始.其中一个帖子包含自定义绑定,但我不确定它是否有效.你必须检查.我把它复制到这里,学分当然不是给我的:

ko.bindingHandlers.ckEditor = {

    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var txtBoxID = $(element).attr("id");
        var options = allBindingsAccessor().richTextOptions || {};
        options.toolbar_Full = [
            ['Source', '-', 'Format', 'Font', 'FontSize', 'TextColor', 'BGColor', '-', 'Bold', 'Italic', 'Underline', 'SpellChecker'],
            ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl'],
            ['Link', 'Unlink', 'Image', 'Table']
        ];

        // handle disposal (if KO removes by the template binding)
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            if (CKEDITOR.instances[txtBoxID]){ 
                CKEDITOR.remove(CKEDITOR.instances[txtBoxID]); 
            }
        });

        $(element).ckeditor(options);

        // wire up the blur event to ensure our observable is properly updated
        CKEDITOR.instances[txtBoxID].focusManager.blur = function () {
            var observable = valueAccessor();
            observable($(element).val());
        };
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var val = ko.utils.unwrapObservable(valueAccessor());
        $(element).val(val);
    }
} 
Run Code Online (Sandbox Code Playgroud)

那么典型的用法就是在HTML中:

<textarea id="txt_viewModelVariableName" 
          data-bind="ckEditor: viewModelVariableName"></textarea>
Run Code Online (Sandbox Code Playgroud)

其次,您可以查看最初由Ryan Niemeyer编写并由其他有才华的人更新的TinyMCE自定义绑定处理程序.也许TinyMCE可以为你而不是CKEditor工作?

  • Steve Sanderson是淘汰赛的创造者,Ryan Niemeyer只是一个很棒的家伙. (3认同)