Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有敲除数据绑定的TinyMCE将不会更新_Javascript_Jquery_Knockout.js_Tinymce - Fatal编程技术网

Javascript 具有敲除数据绑定的TinyMCE将不会更新

Javascript 具有敲除数据绑定的TinyMCE将不会更新,javascript,jquery,knockout.js,tinymce,Javascript,Jquery,Knockout.js,Tinymce,我有TinyMCE WYSiWYG编辑器根据所选对象显示文本,但遇到绑定问题 第一个实例似乎有效,但当从可用文本的下拉列表中选择新文本时,编辑器变为空白,Firebug控制台告诉我: TypeError:D.hasChildNodes不是函数 …utei,string==typeof r{try{r=true==r?!0:false==r?!1:null==r?null:+r 及 NS\u错误\u意外:意外错误 …/,$1;返回false};如果u、 getParamaccessibility_

我有TinyMCE WYSiWYG编辑器根据所选对象显示文本,但遇到绑定问题

第一个实例似乎有效,但当从可用文本的下拉列表中选择新文本时,编辑器变为空白,Firebug控制台告诉我:

TypeError:D.hasChildNodes不是函数 …utei,string==typeof r{try{r=true==r?!0:false==r?!1:null==r?null:+r

NS\u错误\u意外:意外错误 …/,$1;返回false};如果u、 getParamaccessibility_focus{g.addi.addk,a

我已尝试在此处重新创建代码: 这不是100%,但至少它不起作用

如果我没有直接从文本1单击到文本2,而是通过选择选项,文本将正确显示

我想这与下面的init部分有关:

ko.bindingHandlers.tinymce = {
    init: function (element, valueAccessor, allBindingsAccessor, context) {
        var options = allBindingsAccessor().tinymceOptions || {};
        var modelValue = valueAccessor();
        var value = ko.utils.unwrapObservable(valueAccessor());
        var el = $(element)

        //handle edits made in the editor. Updates after an undo point is reached.
        options.setup = function (ed) {
            console.log(ed)
            ed.onChange.add(function (ed, l) {
                if (ko.isWriteableObservable(modelValue)) {
                    modelValue(l.content);
                }
            });
        };

        //handle destroying an editor 
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            setTimeout(function () { $(element).tinymce().remove() }, 0)
        });

        //$(element).tinymce(options);
        setTimeout(function () { $(element).tinymce(options); }, 0);
        el.html(value);

    },
    update: function (element, valueAccessor, allBindingsAccessor, context) {
        var $element = $(element),
                       value = ko.utils.unwrapObservable(valueAccessor()),
                       id = $element.attr('id');

        //handle programmatic updates to the observable
        // also makes sure it doesn't update it if it's the same. 
        // otherwise, it will reload the instance, causing the cursor to jump.
        if (id !== undefined) {
            var tinymceInstance = tinyMCE.get(id);
            if (!tinymceInstance)
                return;
            var content = tinymceInstance.getContent({ format: 'raw' });
            if (content !== value) {
                $element.val(value);
                //this should be more proper but ctr+c, ctr+v is broken, above need fixing
                //tinymceInstance.setContent(value,{ format: 'raw' })
            }
        }
    }
};

我发现了问题。发生的是:

选择文本Batch 1并进行一些更改 切换到文本批处理2 绑定从Textbatch 1正确更改为2 然后ed.onChange.add事件处理程序启动并用新的Textbatch 2的内容覆盖先前Textbatch 1的内容 查看URL中的remove/show/light以返回编辑器。我必须内联select2.js,因为Github不允许远程包含它承载的文件,这导致您的小提琴失败

重要部分在ko.utils.domNodeDisposal.addDisposeCallback中:

我不知道为什么删除编辑器会延迟0秒,但这可能是一个很好的原因。因此,我们所做的就是删除“更改”处理程序,以便旧编辑器无法再更新viewmodel中的绑定valueAccessor


编辑:我刚刚注意到我修复了你的小提琴,但不一定是你最初的例外……希望这两件事是相关的。

我发现了问题。发生的事情是:

选择文本Batch 1并进行一些更改 切换到文本批处理2 绑定从Textbatch 1正确更改为2 然后ed.onChange.add事件处理程序启动并用新的Textbatch 2的内容覆盖先前Textbatch 1的内容 查看URL中的remove/show/light以返回编辑器。我必须内联select2.js,因为Github不允许远程包含它承载的文件,这导致您的小提琴失败

重要部分在ko.utils.domNodeDisposal.addDisposeCallback中:

我不知道为什么删除编辑器会延迟0秒,但这可能是一个很好的原因。因此,我们所做的就是删除“更改”处理程序,以便旧编辑器无法再更新viewmodel中的绑定valueAccessor


编辑:我刚刚注意到我修复了你的小提琴,但不一定是你最初的例外……希望这两者是相关的。

根据你所依赖的TinyMCE和jQuery的版本,你可能想尝试一下我最近推出的自定义绑定


根据您所依赖的TinyMCE和jQuery的版本,您可能希望尝试我最近推出的自定义绑定


它在和上可用。

Hmm.@janfohe,我看不出小提琴行为有任何区别。我仍然只能显示第一个选择的textbatch中的文本。Hmm.@janfohe,我看不到小提琴行为有任何区别。我仍然只能显示第一个选择的textbatch中的文本。很好,Michaelpaworth。我能挑战你加入吗在绑定的上下文中标记/自动调整文本;我不确定在绑定的上下文中标记/自动绘制是什么意思。您介意在Github上针对我的存储库创建一个问题吗?让我考虑一下。很好的一个,迈克尔帕普沃斯。我可以向您挑战将文本的标记/自动转换包括到绑定中吗?我不确定你在绑定上下文中的标记/自动转换是什么意思。你介意在Github上对我的库创建一个问题让我考虑吗?
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
  $(element).tinymce().onChange.remove(changeHandler);

  setTimeout(function () { $(element).tinymce().remove() }, 0)
});