2016-09-08 3 views
0

를 업데이트하지 다음 모델 :녹아웃 순수한 계산 관찰 갖는

var dataModel = ko.observable({ someProp: ko.observable() }); 

    var isValid = ko.pureComputed(function() { 
    return dataModel().isValid; 
    }); 

나는 다음과 같은 기능을 가지고 :

 function testMe() { 
      dataModel().isValid = false; // This does not work, why? 
      console.log("isValid: " + isValid()); // Doesn't update, shows old value 

      dataModel({ isValid: false }); // This works however I loose all other properties 
      console.log("isValid: " + isValid()); // Prints correctly updated value 

      console.log(ko.toJSON(dataModel()));   
     } 

내가 testme라는를 실행할 때마다()

dataModel.isValid = 거짓

을 console.log 실행 ("isValid를 :"+ isValid())

가 여전히 "true"로도 내가 위의 false로 설정 한 설정되어

... 왜? . 내가 일할 수있는 유일한 방법은 할 일이다.

dataModel ({isValid : false}); 그러나이 방법을 사용하면 모델의 다른 모든 속성이 느슨해집니다. 이 작품을 어떻게 만들 수 있습니까?

내가 뭘 잘못하고 있니?

+1

는 참조 [이 jsfiddle] (https://jsfiddle.net/8fdyyhr2/이 같은 시도), "[mcve]"를 만들고 * 왜 * 결과를 기대하는지 설명해 주시겠습니까? – Jeroen

+0

또한 (순수한) 계산 된 변수가 관찰 불가능한 변수에 의존하면 올바르게 업데이트되지 않을 수도 있습니다. 돈에 바로 – Jeroen

답변

3

은 관찰 할 수 없습니다. Observable 중 하나가 변경된 경우에만 계산을 수행합니다. 또는 dataModel.valueHasMutated()을 사용하여 dataModel이 변경되었음을 Knockout에 알릴 수 있습니다 (계산 된 것으로 관찰 할 수 있으므로 계산 된 값이 다시 계산됩니다).

나는 관찰 할 수있는 것을 사용하는 것이 좋습니다. 내가 인스턴스에서 "true"를 볼 수 없습니다 당신의 코드를 실행하면

var dataModel = ko.observable({ 
 
    someProp: ko.observable(), 
 
    isValid: ko.observable(true) 
 
}); 
 

 
var isValid = ko.pureComputed(function() { 
 
    return dataModel().isValid(); 
 
}); 
 

 
function testMe() { 
 
    console.log("isValid: " + isValid()); 
 
    dataModel().isValid(false); 
 
    console.log("isValid: " + isValid()); 
 

 
    console.log(ko.toJSON(dataModel())); 
 
} 
 

 
testMe();
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

+0

. 정말 고마워!. 또한 질문입니다. 왜 isValid가 관찰 가능하지 않더라도 @ Jeroen의 예제가 작동합니까? https://jsfiddle.net/8fdyyhr2/ – ShaneKm

+1

@ShaneKm 그의 예제에서'isValid'의 값은 절대로 바뀌지 않습니다. 거짓으로 시작하여 거짓으로 남습니다. 그것이 그의 발언이 말한 것이었다. –

+0

나는 그것을 지금 본다. 감사 – ShaneKm

관련 문제