【发布时间】:2018-07-17 09:30:17
【问题描述】:
我有一个 JSONEditor npm 包的绑定处理程序。我的程序将使用户能够比较这些面板中的两个不同的 JSON 文件。我的 bindingHandler 看起来像这样:
var editor = undefined;
ko.bindingHandlers.jsoneditor = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
const options = {
"mode" : "view"
};
const value = ko.utils.unwrapObservable(valueAccessor());
if(!editor) {
editor = new JSONEditor(element, options);
editor.set(value);
}
else if(element !== editor.container){
editor = new JSONEditor(element, options);
editor.set(value);
}
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
const options = {
"mode" : "view"
};
const value = ko.utils.unwrapObservable(valueAccessor());
if(element === editor.container){
editor.destroy();
editor = new JSONEditor(element, options);
editor.set(value);
}
else {
//editor.set(value);
editor = new JSONEditor(element, options);
editor.destroy();
}
}
};
问题在于,每当我切换面板时,element 就会发生变化,并使用编辑器创建错误。
这是 HTML:
<div class="jsoneditor body" id="editor-1" data-bind="jsoneditor: subject1"></div>
<div class="jsoneditor body" id="editor-2" data-bind="jsoneditor: subject2"></div>
【问题讨论】:
-
您的
editor在jsoneditor的所有实例之间共享... -
@haim770 是的,我不知道我需要做什么..
-
我会首先摆脱那个全局编辑器变量。您需要将每个组件分成一个独立的组件。
标签: javascript html knockout.js bindinghandlers