2014-02-07 3 views
0

를 사용하여 배열 요소를 매핑. 속성은 객체마다 다를 수 있습니다.올바르게 내가 단순화 할 때 이런 식으로 뭔가를 보이는 뷰 모델을 가지고있는 녹아웃 매핑 플러그인

내 매핑 개체는 다음과 같습니다 :

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, 그리고 따라서 다시 속성을 매핑 할 것 같아요.

그래서 나는 짐작이 가지 중 하나를 수행해야합니다 내가 저장할 때이 다시 매핑됩니다 있도록

  1. addObjectMember에 배열에 객체를 추가 나는 __ko_mapping__.mappedProperties 세트를 얻을 필요가있다.
  2. 다시 매핑 할 때 __ko_mapping__.mappedProperties 내부의 존재 여부에 관계없이 매핑 된 개체의 모든 속성을 포함합니다.

내가 더러운 해킹을하지 않는 방법을 알아낼 수있는 방법이 없으므로 여기있는 도움을 주시면 감사하겠습니다.

+0

'ko.toJS'는 원래 매핑 된 것이 무엇인지 신경 쓰지 않는 것 같습니다. 거기에 어떤 문제가 있으므로'ko.mapping.fromJS'를 사용하여 모델을 만든 다음'ko.toJS'를 사용하여 다시 자바 스크립트로 만들 수 있습니까? –

답변

1

ko.mapping.toJS 대신 ko.toJS을 사용했습니다. ko.toJS__ko_mapping__을 신경 쓰지 않고 모든 것을 매핑합니다 (__ko_mapping__ 포함).

즉, 필자가 필요로하는 것보다 조금 더 매핑한다는 의미입니다.