2013-04-25 2 views
2

를 업데이트하지 :녹아웃 계산 부울 값은 다음은 간단한 뷰 모델이야

var vm = { 
     isValid1: ko.observable(false), 
     isValid2: ko.observable(false), 
     isValid3: ko.observable(false), 
     isValid4: ko.observable(false), 

     isAllValid: ko.computed(function() { 
      return isValid1() && isValid2() && isValid3() && isValid4(); 
     }); 
} 

isValid를 업데이트하고이 같은 사실에 그들 모두를 설정 :

vm.isValid1(true); 
vm.isValid2(true); 
vm.isValid3(true); 
vm.isValid4(true); 

isAllValid 업데이트받을 것으로 보인다 없다. 여기서 내가 뭘 잘못하고 있니?

감사

니콜라스

답변

1

당신은 그 같은 문자를 사용하지 못할 어쨌든보기 모델이 복잡하게 될 경우 더 읽기

(등 cumputed 특성을 갖는 등) 뷰 모델로 생성자 함수를 사용하는 것이 더 좋습니다 생성자를 생성해야하고

var VM = function() { 
     this.isValid1 = ko.observable(false); 
     this.isValid2 = ko.observable(false); 
     this.isValid3 = ko.observable(false); 
     this.isValid4 = ko.observable(false); 

     this.isAllValid = ko.computed(function() { 
      return this.isValid1() && this.isValid2() && this.isValid3() && this.isValid4(); 
     }, this); 
}; 

http://jsfiddle.net/FuuQf/

처럼 시작하거나 문자의 창조 후 isAllValid 기능을 설정,하지만 난 리터럴 사용한다고 생각하지 않습니다 VM 용

+0

감사합니다. – Nicolas

4

당신이 정의 할 필요가 뷰 모델로 객체 리터럴을 사용하는 경우 computed 초기 선언 이후이 필요

var vm = { 
     isValid1: ko.observable(false), 
     isValid2: ko.observable(false), 
     isValid3: ko.observable(false), 
     isValid4: ko.observable(false) 
} 

vm.isAllValid = ko.computed(function() { 
    return vm.isValid1() && vm.isValid2() && vm.isValid3() && vm.isValid4(); 
}); 

방식 때문에 어떻게 객체 리터럴 및 자바 스크립트에서 작동 범위. 당신은 Difference between knockout View Models declared as object literals vs functions

+0

감사합니다. 훌륭한 링크. – Nicolas