2013-06-10 3 views
0

Я пытаюсь использовать вычисляемые наблюдаемые выходы 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 парения не обновляет привязки. Можно ли включить изменение a, как если бы он был постоянным членом Model, но с добавленной дополнительной функциональностью?

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

ответ

1

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

Для этого вы можете использовать extenders. Вот fiddle с демо.

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 }); 
} 
Смежные вопросы