Подтвердить что ты не робот

Нокаут не привязан к обновлению

В следующем коде я ожидаю, что моя функция обновления будет выполняться каждый раз при обновлении viewModel.item. Я могу видеть, как мои функции инициализации и обновления запускаются на загрузку страницы, как ожидалось, но не при нажатии на мою кнопку, которая обновляет наблюдаемое значение.

Разметка:

<button id='addButton'>item++</button>
<br/>
<span>viewModel.item = </span>
<span data-bind='text: $data.item(), bind: viewModel.item'></span>

Script:

$(document).ready(function() {
    $('#addButton').click(function() {
        viewModel.item(viewModel.item() + 1);
    });    
    var viewModel = {
        item: ko.observable(1)
    };        
    ko.bindingHandlers.bind = {
        init: function(element, valueAccessor) {
            alert('init');
        },
        update: function(element, valueAccessor) {
            alert('update');
        }  
    };        
    ko.applyBindings(viewModel);
}); 

Я просмотрел некоторые подобные вопросы и не нашел сопоставимого примера. Я создал JSFiddle здесь.

4b9b3361

Ответ 1

Функция update обработчика привязки будет выполняться всякий раз, когда обновляются наблюдаемые, которые он обращается к. Ваша функция не имеет доступа к наблюдаемым.

Вот обновленная версия, которая будет работать:

ko.bindingHandlers.bind = {
    init: function(element, valueAccessor) {
        alert('init');
    },
    update: function(element, valueAccessor) {
        ko.unwrap(valueAccessor());
        alert('update');
    } 
};        

http://jsfiddle.net/vMD74/14/