2013-10-28 5 views
0

사용자의 주소를 업데이트하려고 할 때 매우 이상한 버그가 있습니다. 나는 두 개의 필드, 모두 관찰 가능한이 단순화 주소 개체가 : 나는이 나중에 모두를 업데이트하려고하면 지금녹아웃 관측 가능으로 쓸 수 없습니다.

stateProvince.name = ko.observable(""); 
stateProvince.code = ko.observable(""); 

을,이 개발 도구의 효과적인 프로그램 실행은 다음과 같습니다

stateProvince.name("New York"); 
stateProvince.code("NY"); 

하지만, 두 번째 줄은 실제로 상태 코드의 값을 변경하지 않습니다. 예외가 발생하지 않고 dev 도구에서 변경하려고 시도하면 작동하지 않으며 가장 이상한 부분은 이름을 변경할 때 코드를 변경할 때 오류가있는 모든 것이 제대로 작동한다는 것입니다. 어떤 조건으로 녹아웃 관측치가 오류없이 업데이트되지 못하게 될 수 있습니까? 나는 기존의 코드베이스를 확장하려고 시도하고있다.하지만 내 검색은이 두 객체를 구별 할 수있는 어떤 것도 공개하지 않았다.

+3

가장 좋은 건입니다 jsFiddle에서 재생산하려고합니다. 이 코드를 보면 괜찮아 보입니다. 만약 내가 추측해야만한다면, 나는 당신의'code'가'select'에 묶여 있다고 말할 것입니다. select 요소에서'value' 바인딩 (보통'options')을 사용한다면, Knockout은 당신의 관찰 가능 값이 옵션과 일치하도록 강제합니다. 'NY'가 옵션과 일치하지 않을 수 있습니다. –

+0

그것은 선택에 묶여있다! NY는 옵션이지만 아직 생성되지 않은 옵션을 관찰 할 수있는 배열로 생성하기 때문에 아직 존재하지 않을 수 있습니다. 고맙습니다. select 옵션이 채워지는 콜백을 추가 할 것입니다. – jokulmorder

답변

1

코멘트에서 이동은 대답 : codeselect에 바인딩하고 (보통 options로) 바인딩 value을 사용하는

경우, 넉 아웃은의 관측 값이 옵션에 해당 시행하려고합니다. 초기 값이 옵션에 해당하는지 확인하십시오.

옵션 나중에 채워지고있는 경우, 다음 중 하나를 선택한 값을 다시 채울 필요가있을 것이다, 또는 같은과 초기로드에 그것을 미리 채울 수 있습니다

this.code = ko.observable(data.code); 

//pre-populate with the one matching value 
this.codeOptions = ko.observableArray([data.code]); 
관련 문제