2013-06-10 7 views
0

knockout.js '계산 된 observables 사용하여 모델에서 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 대신에 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 }); 
} 
관련 문제