를 사용하여 배열 요소를 매핑. 속성은 객체마다 다를 수 있습니다.올바르게 내가 단순화 할 때 이런 식으로 뭔가를 보이는 뷰 모델을 가지고있는 녹아웃 매핑 플러그인
내 매핑 개체는 다음과 같습니다 :
var mapping = {
'objectMembers': {
create: function(options){
return new ObjectMemberViewModel(options.data, options.parent);
}
}
};
내 문제를 보려면, 내가 예를 들어주지 :
사용자는 페이지를로드 한 다음 개체를 가져옵니다. 이 객체에는 objectMembers
배열 안에 두 개의 요소가 포함되어 있습니다. 그런 다음 ko.mapping.fromJS를 사용하여 매핑되며 모든 것이 올바르게 작동합니다. 내 모델을 사용하여 내 viewModel을 수정할 수 있으며 viewModel이 업데이트됩니다. 그런 다음 사용자가 addObjectMember
함수를 트리거하는 버튼을 클릭하고 observableArray에 세 번째 항목을 추가합니다. 이것과도 상호 작용할 수 있으며 내 모델에 수행 된 모든 변경 사항은 viewModel에서 예상대로 볼 수 있습니다.
저장을 클릭하면 문제가 발생합니다. save 메소드를 디버그하여 self.selectedObject의 내용을 확인하면 원하는 내용이 포함되어 있음을 알 수 있지만 변수 data
에 다시 매핑 된 객체는 objectsMembers
배열의 마지막 요소가 비어 있습니다. 오브젝트 ({}
). 다른 두 대상은 내가 원하는대로 보입니다.
나는 이유를 알고 있다고 생각합니다. 두 개의 첫 번째 객체는 처음에 매핑되었을 때 가진 모든 속성을 포함하는 __ko_mapping__.mappedProperties
을가집니다. 마지막 하나는 그러나 빈 __ko_mapping__.mappedProperties
, 그리고 따라서 다시 속성을 매핑 할 것 같아요.
그래서 나는 짐작이 가지 중 하나를 수행해야합니다 내가 저장할 때이 다시 매핑됩니다 있도록
addObjectMember
에 배열에 객체를 추가 나는__ko_mapping__.mappedProperties
세트를 얻을 필요가있다.- 다시 매핑 할 때
__ko_mapping__.mappedProperties
내부의 존재 여부에 관계없이 매핑 된 개체의 모든 속성을 포함합니다.
내가 더러운 해킹을하지 않는 방법을 알아낼 수있는 방법이 없으므로 여기있는 도움을 주시면 감사하겠습니다.
'ko.toJS'는 원래 매핑 된 것이 무엇인지 신경 쓰지 않는 것 같습니다. 거기에 어떤 문제가 있으므로'ko.mapping.fromJS'를 사용하여 모델을 만든 다음'ko.toJS'를 사용하여 다시 자바 스크립트로 만들 수 있습니까? –