knockout.js - 将 NicEdit 与 Knockout 一起使用

标签 knockout.js tinymce nicedit

我正在寻找创建自定义 Knockout 绑定(bind)以与 WYSIWYG 编辑器 NicEdit 一起使用 http://nicedit.com/index.php .我在这里找到了一个类似 TinyMCE 库绑定(bind)的 fiddle 示例,但没有成功复制我的需要。

http://jsfiddle.net/rniemeyer/GwkRQ/

之前是否有人为此创建了一个有效的自定义绑定(bind),或者是否有人找到了解决此问题的其他方法?当正常应用 NicEditor 的实例时,它似乎会相应地更新附加的值,但不会触发 knockout observable 更新。

例如,使用以下 javascript 和 html 不会产生有效结果。

这里是JS

var viewModel = {
    content: ko.observable("<p>I want this text to load and change in the editor</p>"),
};

ko.applyBindings(viewModel);
new nicEditor().panelInstance('testTextArea');

这里是 HTML

<form method="post" action="somepage">
    <textarea id="testTextArea" name="content" style="width:100%" data-bind="value: content"></textarea>
</form>

感谢任何见解。

最佳答案

我想出了以下似乎有效的自定义绑定(bind)。我使用了一点 JQuery,但没那么多,所以您可以随时用非 JQuery 的东西替换它。

自定义绑定(bind):

ko.bindingHandlers.nicedit = {
    init: function(element, valueAccessor) {
        var value = valueAccessor();
        var area = new nicEditor({fullPanel : true}).panelInstance(element.id, {hasPanel : true});
        $(element).text(ko.utils.unwrapObservable(value)); 

        // function for updating the right element whenever something changes
        var textAreaContentElement = $($(element).prev()[0].childNodes[0]);
        var areachangefc = function() {
            value(textAreaContentElement.html());
        };

        // Make sure we update on both a text change, and when some HTML has been added/removed
        // (like for example a text being set to "bold")
        $(element).prev().keyup(areachangefc);
        $(element).prev().bind('DOMNodeInserted DOMNodeRemoved', areachangefc);
    },
    update: function(element, valueAccessor) {
        var value = valueAccessor();
        var textAreaContentElement = $($(element).prev()[0].childNodes[0]);
        textAreaContentElement.html(value());
    }
};

以及如何使用它:

<textarea id="area1" data-bind="nicedit: title" style="width: 640px"></textarea>

...在我的示例中,“title”当然是您的绑定(bind)属性。

有两个“限制”:

  • textarea 必须有一个 DOM“id”属性,否则它会崩溃。
  • 使用 IE(至少版本 8)不会触发 DOMNodeInsertedDOMNodeRemoved,这意味着您必须在修改文本样式后键入一些内容它会在您的可观察对象中正确更新。

关于knockout.js - 将 NicEdit 与 Knockout 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15775608/

相关文章:

twitter-bootstrap - 当我使用绑定(bind)处理程序时,Bootstrap Modal 仅显示一次

jquery - knockoutjs 单击和双击

django - Django admin 中的微小 MCE 弹出窗口空白

javascript - nicEdit 字体大小和字体系列不起作用

jQuery UI 选项卡没有 href 和/或内容,只有事件?

javascript - 将 Knockout 与重复的用户控件一起使用

javascript - 多个 "pattern"使用 knockout 的验证扩展器

Jquery TinyMCE 添加/编辑链接 - 无法在 IE 中粘贴

TinyMCE moximanager

php - 防止 nicEdit 创建外部标签