Jquery ui 通过敲除排序表对元素排序后,cleditor的自定义绑定失败

Jquery ui 通过敲除排序表对元素排序后,cleditor的自定义绑定失败,jquery-ui,knockout.js,knockout-sortable,cleditor,Jquery Ui,Knockout.js,Knockout Sortable,Cleditor,首先:检查 我已经用Knockout可排序库创建了元素的可排序数组。当我最初应用绑定时,cleditor会很好地初始化 但是,当对可排序元素进行排序时,cleditor无法重新初始化(我不确定会发生什么,但cleditor失败)。cleditor在Firefox中只显示“true”而不是实际值,在所有其他浏览器中都不显示任何内容 我试图找出问题出在哪里,是在自定义绑定上,还是在jqueryui上,还是在敲除可排序库上 我的控制台没有收到任何错误 ko.bindingHandlers.cledit

首先:检查

我已经用Knockout可排序库创建了元素的可排序数组。当我最初应用绑定时,cleditor会很好地初始化

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

我试图找出问题出在哪里,是在自定义绑定上,还是在jqueryui上,还是在敲除可排序库上

我的控制台没有收到任何错误

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工作


我发现了,但我没有发现那个主题中提到的代码中有任何错误

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

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

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

jQuery(document).on('sortstop', function(event, ui) {
    if (jQuery.contains(ui.item[0], element)) {
        jQuery(element).cleditor()[0].refresh();
    }
});
我还更改了
update
函数以保持
值同步,因为
refresh
更新编辑器的值:


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

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

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

jQuery(document).on('sortstop', function(event, ui) {
    if (jQuery.contains(ui.item[0], element)) {
        jQuery(element).cleditor()[0].refresh();
    }
});
我还更改了
update
函数以保持
值同步,因为
refresh
更新编辑器的值:


我发现此讨论完全复制了我遇到的问题,但我无法使用它,因为我得到的refresh()不是函数错误。我使用的是1.4.4 cleditor版本。我放在一起的这个例子表明它与敲除无关:我发现这个讨论完全复制了我的问题,但我不能使用它,因为我得到的refresh()不是一个函数错误。我使用的是1.4.4Cleditor版本。我把这个例子放在一起,表明它与击倒无关:非常感谢,我花了24个多小时才解决这个问题。不过我猜它应该在cleditor方面。万分感谢,我费了24个多小时才解决这个问题。不过我猜它应该在cleditor方面。