Knockout.js 在WYSIWYG中删除自定义绑定重置光标
我遇到了一个涉及KnockoutJS和jwysiwyg插件()的情况。我正在使用下面所示的自定义绑定。但是,每当用户将文本更新到第二行时,通过绑定更新内容会导致光标重置到编辑器的最开头。因此,每当用户在更新后暂停键入超过1秒时,他们都会被迫单击返回到以前的位置继续Knockout.js 在WYSIWYG中删除自定义绑定重置光标,knockout.js,wysiwyg,jwysiwyg,Knockout.js,Wysiwyg,Jwysiwyg,我遇到了一个涉及KnockoutJS和jwysiwyg插件()的情况。我正在使用下面所示的自定义绑定。但是,每当用户将文本更新到第二行时,通过绑定更新内容会导致光标重置到编辑器的最开头。因此,每当用户在更新后暂停键入超过1秒时,他们都会被迫单击返回到以前的位置继续 ko.bindingHandlers.wysiwyg = { init: function (element, valueAccessor, allBindingsAccessor) { var
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);
}
};
(然后由本公司使用绑定)
更新完成后,如何获取插入符号位置以恢复光标?或者有什么其他解决方案可以在更新时强制光标不移动
编辑:一个jsfiddle来演示这个问题。
请注意,当您在第二行或更远处键入时,会发生什么情况,然后暂停一秒钟,导致光标重置。以下是您看到的内容:
update: function (element, valueAccessor) {
var newValue = ko.utils.unwrapObservable(valueAccessor());
var oldValue = $(element).wysiwyg("getContent");
if (newValue !== oldValue) {
$(element).wysiwyg("setContent", newValue);
}
// ko.bindingHandlers.value.update(element, valueAccessor);
}
我注释掉了该方法的最后一行。。。这似乎是无关的,我真的不知道它为什么会在那里
此外,这些代码行似乎也没有做任何事情:
$.extend(true, {
initialContent : value
}, options);
我认为您正在尝试将initialContent属性添加到options对象。这可以通过以下方式实现:
$.extend(options, {initialContent: value});
然而,即使这样也不需要,因为update方法是在init方法之后调用的,并且来自observable的值在那时被加载到WYSIWYG编辑器中
下面是对更新代码的修改:
$.extend(options, {initialContent: value});