0
이 게시물은 one의 후속 조치입니다. 다음으로녹아웃 재귀 매핑 문제
나는 코드를 업데이트했습니다
viewModel.getQuotesSuccess = function (result) {
var myCoverQuotesViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.Childs = ko.observableArray(ko.utils.arrayMap(data.Childs, function (c) {
return new myCoverQuotesViewModel(c);
}));
self.selectedChild = ko.observable();
self.showChildren = ko.computed(function() {
return self.selectedChild()
&& self.selectedChild().Childs().length > 0;
});
var mapping = {
'CoverQuotes': {
create: function (options) {
return new myCoverQuotesViewModel(options.data);
}
}
}
ko.mapping.fromJS(result, mapping, viewModel);
};
뷰 모델이 같은 것을 보일 것이다 : 그래서 간단히 말해서
var viewModel = {
CoverQuotes: [{id: 1, label:'test', Childs:[{id: 2, label:'child1'}]]
};
을, 나는 각 요소는 CoverQuotes (등)의 배열을 포함 CoverQuotes의 배열을 가지고있다.
이 맵핑에서의 문제점은 차일 즈 관찰 가능 어레이와 관련이 있습니다. 전화 할 때 :
return new myCoverQuotesViewModel(options.data);
주 개체는 괜찮습니다. 그러나 arrayMap 함수 내에서 생성자를 호출하면 그 행은 다음과 같습니다.
ko.mapping.fromJS(data, {}, self);
아무 것도 수행하지 않습니다.
결과적으로 중첩 된 자식에는 selectedChild 및 showChildren 속성이 할당되지만 다른 모든 요소 (예 :이 예에서는 id 및 label)가 누락되었습니다.
매핑이 아이들을 위해 잘 작동하도록 나는 무엇을 놓치고 있습니까?
당신이 당신의 VM 외부에서 mappingChildren 옵션을 배치하여 같은 목표를 달성하지 않았을 재귀 커스텀 매핑을 사용하여 내 문제를 해결했다? 실제로 mappingChildren의 'Childs'속성을 매핑에 복사하고 ko.mapping.fromJS (data, mapping, self)에 자식 매핑 지시어를 역전시킬 수 있어야합니다. 데이터에는 'Childs'속성이 포함되므로 매핑이 동일하더라도 매핑에서 'Childs'속성을 사용해야합니다. – beauXjames