Обновление пользовательского связывания нокаута не работает
Я пытаюсь добавить пользовательский связыватель для hasFocus, чтобы работать так
ko.bindingHandlers.hasfocus = {
//update the control when the view model changes
update: function (element, valueAccessor) {
ko.unwrap(valueAccessor());
alert('update');
setTimeout(function () {
alert(3);
if (value
&& element.offsetWidth && element.offsetHeight
&& document.activeElement && document.activeElement != element) {
element.focus();
ko.utils.triggerEvent(element, "focusin"); // For IE, which doesn't reliably fire "focus" or "blur" events synchronously
}
});
}
};
Но это никогда не входит в эту функцию никогда. Я следую этому примеру
http://jsfiddle.net/mbest/tAGmp/
Дело в том, что мое поле ввода не видно в начале. Если я нажимаю на какое-то место, оно становится видимым. Поле ввода выглядит так
<input type="text" data-bind="hasFocus: true" />
Я пытался заставить его работать с верным значением жесткого кода. Если это сработает, я изменю это на какое-то наблюдаемое. Какие-нибудь мысли?
1 ответ
Я обновил скрипку здесь. Как вы можете видеть в своей консоли, она запускается изначально и при вводе значения.
ko.bindingHandlers.hasfocus = {
update: function(element, valueAccessor) {
console.log('update');
var value = ko.utils.unwrapObservable(valueAccessor());
setTimeout(function() {
if (value
&& element.offsetWidth && element.offsetHeight
&& document.activeElement && document.activeElement != element)
{
element.focus();
ko.utils.triggerEvent(element, "focusin"); // For IE, which doesn't reliably fire "focus" or "blur" events synchronously
}
},0);
}
};
Надеется, что это помогает.