绑定为可观察到的敲除时如何更新ckeditor数据?

里兰·弗里德曼

我正在尝试与ckeditor一起工作,作为可观察到的基因敲除(knockout.js),并且遇到了一些麻烦。首先是我的代码:

ko.bindingHandlers.CKEDITOR = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
         var ckEditorValue = valueAccessor();
         var id = $(element).attr('id');
         var options = allBindings().EditorOptions;
         var instance = CKEDITOR.replace(id, {
             on: {
                 change: function () {
                     // This moves the caret to the start of the editor on each key pressed
                     ckEditorValue(instance.getData());
                 }
             }
         });
         // instance.setData(ckEditorValue());
     },
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
         var id = $(element).attr('id');
         var ckEditorValue = valueAccessor();
         CKEDITOR.instances[id].setData(ckEditorValue());
     }
};

我在使用此代码时遇到的问题是,在我按下的每个键上,change事件触发了插入符号移动到编辑器的上端开始位置。我尝试调用blur事件而不是change事件,但单击“保存”按钮时不会触发,仅当单击空白位置或移至其他控件时才会触发。

那我该如何保持我的观测值更新呢?

扬福

我在其他编辑器中遇到了类似的问题,并通过删除update处理程序并将其替换为手动订阅来解决了该问题这样,您可以引入一些共享状态,说“跳过此更新,就是我”:

ko.bindingHandlers.CKEDITOR = {
  init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
    var ckEditorValue = valueAccessor();
    var id = $(element).attr('id');
    var options = allBindings().EditorOptions;
    var ignoreChanges = false;

    var instance = CKEDITOR.replace(id, {
      on: {
        change: function() {
          ignoreChanges = true;
          ckEditorValue(instance.getData());
          ignoreChanges = false;
        }
      }
    });

    ckEditorValue.subscribe(function(newValue) {
      if (!ignoreChanges) {
        instance.setData(newValue);
      }
    });

  }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android数据绑定:可观察到的RecyclerView适配器列表

可观察到的异步

如何处理可观察到的错误,但继续观察可观察到的东西?

KnockoutJS:可观察到的foreach绑定数组

如何枚举可观察到的同步?

可观察到的更新时,所选选项不会更新,尽管optionsValue确实会更新

任一可观察到的更新时触发代码

使用HttpClient时,如何从可观察到的响应中提取令牌?

当数组开始为空时,可观察到的数组mobx不会更新

刷新可观察到

当基础数据源具有新值时,了解可观察到的RxJava

更新可观察到的“ roles [0]未定义”时出错

如何使用选择框和敲除对可观察数组进行排序并重新绑定到列表

如何使“独立”计算的可观察到的某些可观察到的(Knockout.js)

敲除和可观察到的阵列不匹配

引用可观察到的自定义html id的敲除

如何在Javascript中返回对函数的引用(可观察到的敲除)

从敲除3.2中的自定义组件可观察到的更新

带有敲除的jQWidgets数字输入不会更新为可观察到的

如何“绑定”(存储)可观察到的$ index到我的可观察到的?

可观察到淘汰赛更新

其他功能中可观察到的敲除/ JS引用

如何使用包含可观察到的字符串的表达式使基因敲除可见绑定起作用?

将Asp.Net MVC json结果绑定到敲除.js可观察到的数组

具有可观察对象的敲除组件不会更新数据

可观察到可观察的顺序

可观察到的本机脚本未绑定

(JsFiddle)可观察到的敲除在绑定到console.log的屏幕上显示出不同的值

可观察到的数据集未在模板中更新