小编MDo*_*MDo的帖子

淘汰赛,CKEditor和单页应用程序

我有一个涉及KnockoutJS和CKEditor的情况.

基本上我们的网站是"单页"应用程序风格的一部分,目前它只涉及2个页面,但可能会随着时间的推移而扩展,目前它只是一个"列表"页面和一个"管理"页面,用于名单.

管理页面本身需要某种富文本编辑器,我们已经将CKEditor用于公司范围的解决方案.

因为这两个页面是"单页"样式,显然CKEditor无法注册管理元素,因为它们不在页面加载上 - 足够简单的问题需要修复.因此,作为一个示例,我在一个非常有用的点击事件上附加了CKEditor.接下来的问题是,然后设置的Knockout observable没有得到更新,因为CKEditor实际上并没有修改它附加的textarea,它会创建你实际编辑的所有div/html元素.

经过一段时间的谷歌搜索后,我找到了一个用TinyMCE做这个的例子 - http://jsfiddle.net/rniemeyer/GwkRQ/所以我想我可以为CKEditor调整类似的东西.

目前我非常接近有一个可行的解决方案,我已经使用这种技术初始化和更新正确的observable(我将在底部发布代码),甚至正确地回发到服务器 - 太棒了.

我目前遇到的问题是"单页"应用程序部分和CKEditor的重新初始化.

基本上你可以点击列表进行管理然后保存(返回到列表页面)然后当你去另一个'管理'时CKEditor被初始化但是它没有任何值,我已经检查了更新代码(下面)和'value'肯定有正确的值,但它没有被推送到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 …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc ckeditor singlepage knockout.js

16
推荐指数
4
解决办法
6834
查看次数

标签 统计

asp.net-mvc ×1

ckeditor ×1

knockout.js ×1

singlepage ×1