2014-07-07 6 views
1

현재 Knockout을 사용하여 매우 많은 응용 프로그램을 작성 중이며 계산 된 관찰 가능 쓰기 가능으로 만드는 문제에 봉착했습니다.녹아웃 기록 가능한 계산 된 관찰 가능

현재 사용자가 연령 그룹을 선택하고 여기에서 선택한 값을 사용하여 옆에 입력 된 텍스트를 채워서 계산 된 관찰 가능 연령 그룹의 인구를 표시하는 드롭 다운 옵션이 있습니다. 드롭 다운 및 텍스트 입력 값은 모두 배열에서 채워집니다.

아래 코드를 설정했지만 기본적으로 텍스트 입력 값이 계산 된 관찰 가능을 통해 생성되고 드롭 다운에서 값을 선택할 때 올바른 형식이 사용자 정의 바인딩 처리기를 통해 적용된다는 것을 알 수 있습니다. .

내가 겪고있는 문제는 텍스트 입력에 사용자 지정 값을 입력하면 (드롭 다운에서 값을 선택하는 것과는 반대로 텍스트 상자에 직접 입력 한 경우) 텍스트 상자를 흐리게하면 사용자 지정 서식 입력 한 값에 적용되지 않으며이 문제를 해결하는 방법을 잘 모릅니다.

self.selectedPopulation = ko.computed({ 

    read: function() { 
     return self.chosenAge().population; 
    }, 

    write: function (value) { 
     // write value back here? 
    }, 

    }); 

Codepen :가 변경 될 때 http://codepen.io/anon/pen/HkguL (쓰기 기능이 라인 (76)에있다) 당신은 selectedPopulation에게 정상적인 관찰을하고, 관찰 chosenAge에 가입 ​​할 필요했습니다

+1

질문하는 질문에 직접 대답하지 않습니다. 하지만 사용자 지정 바인딩 처리기를 서식 문제를 해결할 수있는 잘못된 방법이라고 생각합니다. 일반적으로 관찰 할 수있는 형식이 지정되지 않은 데이터를 저장하고 표시 전용 서식을 추가하는 읽기 전용 계산 된 있습니다. 숫자를 편집해야하는 경우 편집 상자에 쉼표가 없어야합니다. 읽기 - 쓰기로 편집하도록하더라도 사용자 정의 바인딩이 필요하지 않습니다. – Retsam

답변

3

통지합니다.

당신은 바인딩에 녹아웃 폭파 중지 더미 객체 chosenAge을 만들어야합니다 :

self.chosenAge = ko.observable({age: '', population: ''}); 

을 그리고 당신의 관측에 계산 변경 :

// Selected population 
self.selectedPopulation = ko.observable(''); 

을 그리고 가입 관측 가능 :

self.chosenAge.subscribe(function (newValue) { 
    self.selectedPopulation(newValue.population); 
}); 

이전에 CodePen을 사용하지 않았지만 업데이트했습니다. 당신의 코드 here이 제 작업 예제에서 놓친 경우를 대비해서.

+0

거의 다 왔어. 우리는 더 가까이에있어, 고마워. 유일한 문제는 드롭 다운에서 값을 선택하고 사용자 정의 값을 입력하면 사용자 정의 값이 연관된 드롭 다운 항목에 기록되므로 드롭 다운에서 사용 가능한 옵션 사이를 다시 돌아 가면 볼 수 있습니다. 사용자 정의 값은 당시 선택되었던 옵션과 연관됩니다. 값을 매번 재설정하고 사용자 정의 값을 입력 한 다음 드롭 다운 목록으로 돌아 가면 원래 값으로 되돌아 가야합니다 ... codepen : http://codepen.io/anon/pen/uepEy – leaksterrr

+0

아, 그게 네가 원했던 말인지 아닌지 궁금해했다. 지금 원하는 것을 수행해야하는보다 단순한 솔루션으로 업데이트되었습니다. –

관련 문제