1

首先:检查这个 fiddle

我有使用 Knockout 可排序库创建的可排序元素数组。当我最初应用绑定时,cleditor 初始化得很好。

但是,当对可排序元素进行排序时,cleditor 无法重新初始化(我不确定会发生什么,但 cleditor 失败了)。cleditor 在 Firefox 中只显示“true”而不是实际值,在所有其他浏览器中什么都没有。

我试图找出问题出在哪里,是否在自定义绑定、jQuery-UI 或 Knockout 可排序库上?

我没有在控制台中收到任何错误。

ko.bindingHandlers.cleditor = {
        init: function(element, valueAccessor, allBindingsAccessor) {

            var modelValue = valueAccessor(),
                allBindings = allBindingsAccessor();

            var $editor = jQuery(element).cleditor({
                height: 50,
                controls: "bold italic underline | bullets numbering | undo redo"
            });

            $editor[0].change(function() {

                var elementValue = $editor[0].doc.body.innerHTML;
                if (ko.isWriteableObservable(modelValue)) {
                    modelValue(elementValue);

                } else {
                    if (allBindings['_ko_property_writers'] && allBindings['_ko_property_writers'].cleditor) {
                        allBindings['_ko_property_writers'].cleditor(elementValue);
                    }
                }
            });
        },

        update: function(element, valueAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor()) || '',
                $editor = jQuery(element).cleditor();

            if ($editor[0].doc.body.innerHTML !== value) {
                //$editor[0].doc.body.innerHTML = value;
                $editor[0].doc.body.innerHTML = value;
                $editor[0].focus();
            }
        }
    };

即使在对元素进行排序之后,如何使 cleditor 工作?

我找到了这个资源,但我在该主题中所说的代码中找不到任何错误。

4

1 回答 1

4

您提供的链接很有帮助。CLEditorrefresh方法是在拖动后更新它的正确方法。它只需要在正确的时间使用可排序stop事件完成。

stop: function(event, ui) {
    $(ui.item).find("textarea").cleditor()[0].refresh();
}

http://jsfiddle.net/mbest/rh8c2/1/

我还努力将其集成到您的cleditor绑定中。在init函数中:

jQuery(document).on('sortstop', function(event, ui) {
    if (jQuery.contains(ui.item[0], element)) {
        jQuery(element).cleditor()[0].refresh();
    }
});

我还对函数进行了更改update以保持<textarea>值同步,因为refresh从以下位置更新编辑器的值<textarea>

$editor[0].updateTextArea();

http://jsfiddle.net/mbest/jw7Je/7/

于 2014-02-21T11:52:24.840 回答