我有一種情況涉及KnockoutJS和jwysiwyg插件(https://github.com/jwysiwyg/jwysiwyg)。我正在使用下面看到的自定義綁定。但是,只要用戶將文本更新到第二行,通過綁定更新內容就會使光標重置到編輯器的開頭。因此,無論何時用戶在更新後暫停輸入1秒鐘以上,他們都不得不點擊回到之前的位置繼續。Knockout自定義綁定重置所見即所得光標
ko.bindingHandlers.wysiwyg = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().wysiwygOptions || {};
var value = ko.utils.unwrapObservable(valueAccessor());
var $e = $(element);
$.extend(true, {
initialContent : value
}, options);
$e.wysiwyg(options);
//handle the field changing
function detectFn() {
var observable = valueAccessor();
var newvalue = $e.wysiwyg("getContent");
observable(newvalue);
}
var current = $e.wysiwyg('document');
var timer;
current.bind({
keyup: function(){
clearTimeout(timer);
timer = setTimeout(detectFn, 1000);
}
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$e.wysiwyg('destroy');
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
$(element).wysiwyg("setContent", value);
ko.bindingHandlers.value.update(element, valueAccessor);
}
};
(的結合被此使用)
<textarea data-bind="wysiwyg: yourViewModelValue"></textarea>
我怎樣才能插入符位置,以恢復光標一旦更新完成?或者有什麼其他解決方案來強制光標在更新時不會移動?
編輯:一個jsfiddle來演示這個問題。 http://jsfiddle.net/797ZL/ 注意當你在第二行或以上輸入時會發生什麼,然後暫停一秒,導致光標重置。
很清楚,就像一個魅力。 – derickt