나는 꽤 오랫동안 이것을 알아 내려고 노력해 왔습니다. 이 문제를 해결할 수있는 것을 찾지 못했습니다.하지만 제가 틀렸다면 수정하십시오.KnockoutJS : 매핑을 사용하여 viewModel에 데이터 업데이트/삽입
문제점 : JSON API의 데이터가 중첩 된 배열/오브젝트 구조로 들어 있습니다. 필자는 매핑을 사용하여 초기에 모델을 내 데이터로 채 웁니다. 이를 업데이트하기 위해 새 데이터가 도착하면 모델을 확장하거나 기존 데이터를 업데이트하려고합니다.
맵핑 옵션 키가 발견되면이 트릭을 수행해야하지만 매핑 옵션의 기능을 잘못 이해했을 수 있습니다. 나는이 문제를 삶은했습니다
이 예에 의해 표현된다 :
이var userMapping = {
key: function(item) {
return ko.utils.unwrapObservable(item.id);
}
};
// JSON call replaced with values
var viewModel = {
users: ko.mapping.fromJS([], userMapping)
};
// Should insert new - new ID?
ko.mapping.fromJS([{"id":1,"name":"Foo"}, {"id":2,"name":"Bar"}], userMapping, viewModel.users);
// Should only update ID#1 - same ID?
ko.mapping.fromJS([{"id":1,"name":"Bat"}], userMapping, viewModel.users);
// Should insert new - New ID?
ko.mapping.fromJS([{"id":3,"name":"New"}, {"id":4,"name":"New"}], userMapping, viewModel.users);
ko.applyBindings(viewModel);
바이올린이 : http://jsfiddle.net/mikaelbr/gDjA7/
당신이 볼 수 있듯이, 첫 번째 줄은 데이터를 삽입합니다. 문제 없다. 그러나 업데이트하려고하면 내용이 바뀝니다. 세 번째 매핑과 동일합니다. 콘텐츠를 확장하는 대신 내용을 대체합니다.
잘못 사용하고 있습니까? 매핑을 사용하기 전에 컨텐츠를 "수동으로"확장해야합니까?
편집 솔루션 :
I는 현재의 모든 모델을 저장하는 제 헬퍼 어레이를 구비하여 케이스를 해결했다. 새 데이터에서이 배열을 확장하고 축적 된 항목을 포함하도록 뷰 모델을 업데이트했습니다.
업데이트 (내 경우 WebSocket 메시지)에서 모델을 반복하고 해당 항목의 내용을 변경 한 다음 valueHasMutated() 메서드를 사용하여 변경된 값을 Knockout 라이브러리에 전달했습니다.
예. 이것은 내가 어떻게 그것을 해결했는지에 대한 것입니다. – mikaelb
이것에 대한 의견 : http://stackoverflow.com/questions/20397054/knockout-js-mapping-keys-and-kendo-ui-grid – jtromans