我遇到一个与 KnockoutJS & amp; CKEditor 有关的情况。
基本上,我们的网站有一部分是单页应用程序样式,目前它只涉及两页,但可能会随着时间推移而扩大,目前它只是一个列表页面和列表中项目的管理页面。
管理页面本身需要 某种丰富的文本编辑器, 我们已经与 CKEditor 一起寻找一个全公司解决方案。
因为这两页是单页样式, 显然 CKEditor 无法对管理元素进行注册, 因为它们没有在页面上加载 - 问题非常简单, 需要修正。 因此, 作为样本, 我附加了 CKEditor, 点击事件效果很好。 下一个问题是, 设置的击倒观测结果没有更新, 因为 CKEditor 实际上没有修改它所附加的文本区域, 它创造了所有您实际编辑的 div s/ html 元素 。
我发现了一个跟小MCE一起做这件事的人的例子——,我想我可以为CKEditor改写类似的东西。
目前我已相当接近找到一个可行的解决方案, 我已利用这个技术(我将在底部张贴代码), 开始并更新正确的观测结果, 甚至正确张贴到服务器上- 棒极了 。
目前我遇到的问题是 单页应用程序部分 和重新启用CKEditor。
基本上,您可以从列表中单击来管理然后保存(可追溯到列表页面),然后,当您去另一个管理 CKEditor 时,该 CKEditor 已经初始化,但其中没有任何值,我检查了更新代码(下面),值肯定有正确的值,但是它没有被推到 CKEditor 本身 。
也许是因为对CKEditor的流程/初始化进程缺乏了解, 或者对击杀约束缺乏了解, 或者或许是因为我们为单页应用程序设置的框架有问题- 我不确定。
这是代码:
//Test one for ckeditor
ko.bindingHandlers.ckeditor = {
init: function (element, valueAccessor, allBindingsAccessor, context) {
var options = allBindingsAccessor().ckeditorOptions || {};
var modelValue = valueAccessor();
$(element).ckeditor();
var editor = $(element).ckeditorGet();
//handle edits made in the editor
editor.on( blur , function (e) {
var self = this;
if (ko.isWriteableObservable(self)) {
self($(e.listenerData).val());
}
}, modelValue, element);
//handle destroying an editor (based on what jQuery plugin does)
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
var existingEditor = CKEDITOR.instances[element.name];
existingEditor.destroy(true);
});
},
update: function (element, valueAccessor, allBindingsAccessor, context) {
//handle programmatic updates to the observable
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).html(value);
}
};
所以在 HTML 中, 它是一个相当标准的击倒数据组合: 当视图模式被初始化时, 应用约束的 ckeyitor 。
我用调试器;在代码中看到流, 它看起来像当我装载 它第一次叫进, 然后更新, 当我在第二次去的时候 它击中ko.utis.domNodeDisposal 来处理元素。
我尝试过不破坏它,而CKEditor后来抱怨说,这个名字已经存在。我尝试过不销毁它,检查它是否存在,并初始化它是否不存在,这是第一次起作用,但第二次我们没有CKEditor。
我想,我所缺少的只有一件事 能够让它发挥作用 但我已经用尽了所有的选择
有谁知道这三件事能帮我吗?
外面有没有淘汰专家 能帮我解脱吗?
任何帮助都将非常感谢。
MMD 多边