Обновление зависимостей записываемых вычисляемых наблюдаемых
Я пытаюсь использовать вычисляемые obockables knockout.js для настройки C#-подобных свойств модели. Я хочу, чтобы наблюдаемые принимали только допустимые значения. Упрощенный пример:
function Model()
{
var a = 100;
var b = 200;
var $ = this;
this.a = ko.computed({
read: function(){return a},
write: function(value){
var newval = parseFloat(value, 10);
if(newval < 1000)
a = newval;
}});
this.b = ko.observable(b);
}
Запись в a
hover не обновляет привязки. Можно ли включить изменение a
как будто это был постоянный член Model
но с дополнительной функциональностью?
Я знаю, что могу использовать второе наблюдаемое, чтобы содержать фактическое значение и полагаться на его механизм обновления, но этот подход быстро становится громоздким с увеличением числа вычисляемых свойств такого рода.
1 ответ
Вычисляемая наблюдаемая не подходит для вашего примера, поскольку вычисляемая наблюдаемая - это функция, которая должна зависеть от одной или нескольких других наблюдаемых.
Вместо этого вы можете использовать расширители для достижения этой цели. Вот скрипка с демо.
ko.extenders.maxNumber = function(target, option) {
var result = ko.computed({
read: target,
write: function(value){
var newval = parseFloat(value, 10);
if (newval < option) {
target(newval);
} else {
alert('Number is to big');
}
}
});
result(target());
return result;
};
function Model() {
var a = 100;
this.a = ko.observable(a).extend({ maxNumber: 1000 });
}