我正在尝试编写自定义绑定以将淘汰赛绑定到froala-editor。
我的绑定按以下方式工作:
ko.bindingHandlers.froala = {
init: function(element, valueAccessor){
var options = {
inlineMode: false,
alwaysBlank: true,
buttons : ["bold", "italic", "createLink"],
autosaveInterval: 10,
contentChangedCallback: function () {
var html = $(element).editable("getHTML"),
observable = valueAccessor();
observable( html );
}
};
$(element).editable(options);
// handle disposal (if KO removed by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).editable("destroy");
});
},
update: function(element, valueAccessor){
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).editable("setHTML", value);
}
}
在这里我使用autosaveInterval,因为我找不到更合适的方法。
我的 HTML 非常简单:
<div data-bind="froala: txt"></div>
对应的JS:
function test() {
this.txt = ko.observable('Hello');
}
var a = new test();
ko.applyBindings(a);
一切正常,但唯一的问题是每次之后autosaveInterval
,我的编辑器都会失去焦点。经过调查,我发现这observable( html );
是罪魁祸首。如果我注释掉它,焦点不会丢失,但是我的模型不同步是可以理解的。
任何人都可以尝试帮助我吗?
感谢@nemesv,我能够用 repro 制作一个jsfiddle。