나는 KnockoutJS 문서를 통해 작업 중이며 page에서 "Writeable calculated observables"섹션의 예제 3을 수정하려고했습니다.KnockoutJS 버그입니까 아니면 여러 바인딩이 잘못 되었습니까?
이 예제는 기본적으로 텍스트 상자를 보여주고 사용자가 텍스트 상자에 숫자가 아닌 값을 입력하면 메시지를 표시합니다. 메시지가 나타날 때 텍스트 상자에 분홍색 배경이 있도록 코드를 수정하려고했습니다.
잘못된 값을 입력하면 텍스트 상자가 예상대로 분홍색이되지만 입력 한 값이 원래 값으로 대체됩니다. 분홍색 배경을 얻기 위해 스타일 바인딩을 추가하기 전에 모든 것이 잘 작동했기 때문에이 문제가 왜 발생하는지 알 수 없습니다. 스타일 바인딩을 제거하고 잘못된 값을 입력 할 때 동작이 어떻게 변경되는지 확인하십시오.
무슨 일 이니?
코드는 아래 또는 시도하십시오 jsfiddle.
<p>
Enter a numeric value:
<input data-bind="value: attemptedValue
,style: {backgroundColor: lastInputWasValid() ?
'transparent' :
'pink' }"/>
</p>
<div data-bind="visible: !lastInputWasValid()">That's not a number!</div>
function MyViewModel() {
this.acceptedNumericValue = ko.observable(123);
this.lastInputWasValid = ko.observable(true);
this.attemptedValue = ko.computed({
read: this.acceptedNumericValue,
write: function (value) {
if (isNaN(value))
this.lastInputWasValid(false);
else {
this.lastInputWasValid(true);
this.acceptedNumericValue(value); // Write to underlying storage
}
},
owner: this
});
}
ko.applyBindings(new MyViewModel());
편집 : 스타일 바인딩이 제거 된 또 다른 fiddle입니다. 문자 'a'를 추가하고 텍스트 상자에서 초점을 잡으십시오. 문자 'a'가 어떻게 거기에 머무르는 지 주목하십시오. 원래 fiddle 텍스트 상자로 시도해보고 제거 방법을 확인하십시오. 두 피들 간의 유일한 변화는 스타일 바인딩의 존재입니다.
당신이 스타일은 내가 같은 바인딩을 제거하려고 되세요 말하는? 이렇게하면 잘못된 값이 제거되는 대신 텍스트 상자에 남아 있도록 동작이 변경됩니다. 스타일 바인딩이 제거 된 새로운 [피들] (http://jsfiddle.net/6JzJ8/)이 있습니다.문자 'a'를 추가하고 거기에 머무는 것을 확인하십시오. 원래의 바이올린으로 그렇게 해보고 글자 'a'를 추가하고 텍스트 상자를 떠날 때 차이점을 확인하십시오. – xTRUMANx