knockoutjs 매핑 플러그인 2.11에서 viewmodel (배열 요소 사용)이 ko.mapping.fromJS로 업데이트되고 새 배열 요소의 길이가 이전보다 길면 ko.mapping.toJS가 빈 배열 항목을 생성한다는 것을 알았습니다 하나. 녹아웃 매핑이 버그입니까? 빈 배열 항목
매핑 내 초기 데이터
입니다 : 새로운 객체와var initData = {text: 'Some Text',
arr: [{key: 1, value: 'a'},
{key: 2, value: 'b'}]};
그런 다음 업데이트보기 모델 : 나는 ko.mapping.toJS을()가 호출 그 후
var newData = {text: 'Changed Text',
arr: [{key: 1, value: 'aa'},
{key: 12, value: 'bb'},
{key: 13, value: 'cc'}]};
, 내가 발견 세 번째 배열 항목은 빈 객체입니다. 버그인지 또는 무엇인가 놓친 것이 확실하지 않습니다. 내가 알아챈 또 다른 점은 데이터를 처음 업데이트 할 때만 발생한다는 것입니다. initData로 뷰 모델을 갱신 한 후 newData를 다시 갱신하면 결과가 정확합니다. http://jsfiddle.net/gonglei/xgPSq/
편집 : 답변 해 주셔서 감사합니다. Jason. 귀하의 솔루션이 제 실제 상황에 맞지 않는 것 같습니다. 수정 된 데이터 개체를 검색하여 서버로 보내야합니다. 그래서 내가 ko.mapping이라고 부르는 순간 .JSS는 계산 된 함수에 JSON 문자열을 표시하는 것이 아니라 올바른 데이터 객체를 바로 얻을 수 있기를 바랍니다. 나는 ko.mapping.toJS를 호출 한 직후 휴식 지점을 놓고 데이터 객체를 보았고 세 번째 요소는 실제로 비었다. 그리고 내 서버는이 빈 요소를 받았습니다. 스로틀 익스텐더는 나에게 정확한 물체를 주었지만 비동기식입니다. 어쨌든 나는 그것을 버그로보고했다. 개발자가 그것을 확인하거나 해결책을 줄 수 있는지 확인한다.
를 해결한다 : //github.com/SteveSanderson/knockout.mapping – Niko
데이터 객체가 즉시 정확하고 ko.mapping.toJS가 올바른 JSON을 반환합니다. 유일한 문제는 계산 된 결과가 GUI 변경을 유발하지 않는 ko.mapping.toJS입니다. –
또한 Knockout 매핑이 빈 항목을 컬렉션에 채우는 IE 9에서 문제가 발생했습니다. 이 오류는 때때로 발생하기 때문에 진단하기가 어렵습니다. 첫 번째 항목과 마지막 항목 ([[object object] ,,, [object Object]]) 만 채워진 4 개의 항목 JSON 배열이 있습니다. 이상한가? –