Обновление пользовательского связывания нокаута не работает

Я пытаюсь добавить пользовательский связыватель для 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 ответ

Я обновил скрипку здесь. Как вы можете видеть в своей консоли, она запускается изначально и при вводе значения.

http://jsfiddle.net/tAGmp/11/

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);
    }
};

Надеется, что это помогает.

Другие вопросы по тегам