2014-01-20 2 views
1

Я пытаюсь использовать нокаут для отображения в диапазоне значения из функции расширения.нокаут не обновляет наблюдательные знаки в пределах расширенных функций

Вот мой HTML:

<input type="text" data-bind="value: clientName" /> 
<span data-bind="text: clientName.dummy"></span> 

И мой код JavaScript:

Model = function() { 

//MyExtension definition 
ko.extenders.MyExtension = function(target, options) { 
    target.dummy = ko.observable('hello'); 

    target.subscribe(function(newValue){ 
     target.dummy = ko.observable(new Date().toString()); 
     target.dummy.notifySubscribers(); //this shouldn't be necessary 
    }); 

    return target; 
}; 

this.clientName = ko.observable().extend({MyExtension: "some options here"}); 

}; 

myModel = new Model() 
ko.applyBindings(myModel); 

С "фиктивный" сам по себе является наблюдаемое поведение я ожидал это:

1) User changed input box text 
2) knockout trigers the subscribe function (and this is hapening) 
3) dummy value is updated with current time (happens to) 
4) The span's text is updated with last dummy value (this is not happening) 

Любая идея, почему? Спасибо.

PS: Вот полный тест: http://jsfiddle.net/AYLv8/5/

ответ

1

Вы подменяете dummy свойства с новым совершенно новыми наблюдаемым в вашей subscribe функции.

Правильная реализация будет обновить dummy наблюдаемым:

target.subscribe(function(newValue){ 
    target.dummy(new Date().toString()); 
}); 

Demo JSFiddle.

Смежные вопросы