코드가 조금 바뀌 었습니다. JSFiddle의 버전을 확인하십시오.
var jsonFromServer = '{"ModuleId":1,"Metadatas":[{"Id":1,"MinValue":null,"MaxValue":null,"FieldName":"Teste","SelectedType":"String","SelectedOptionType":null,"IsRequired":true,"Options":[]}]}';
귀하의 코드 나던 작업하여 jsonFromServer 변수가 귀하의 질문에 설명 된 것처럼 우리가 바인딩에 필요한 방법을 포함하지 않기 때문에.
self.LoadDataFromServer = function() {
var jsonFromServer = '{"ModuleId":1,"Metadatas":[{"Id":1,"MinValue":null,"MaxValue":null,"FieldName":"Teste","SelectedType":"String","SelectedOptionType":null,"IsRequired":true,"Options":[]}]}';
ko.mapping.fromJSON(jsonFromServer, mapping, self);
}
:
var mapping = {
'Metadatas': {
create: function(options) {
var newMetaData = new MetadataViewModel(options.parent);
newMetaData.Id(options.data.id);
newMetaData.FieldName(options.data.FieldName);
newMetaData.SelectedType(options.data.SelectedType);
newMetaData.SelectedOptionType(options.data.SelectedOptionType);
newMetaData.IsRequired(options.data.IsRequired);
newMetaData.Options(options.data.Options);
// You can get current viewModel instance via options.parent
// console.log(options.parent);
return newMetaData;
}
}
}
그런 다음 내가이에로드 기능을 변경 : - (> Metadatas는)
그래서 우리는 메타 데이터는이 같은 매핑 과정에서 객체에 대한 함수를 만드는 사용자 정의를 정의 할 필요가
새로운 viewModel을 선언하고 ko.applyBindings를 다시 호출 할 필요가 없습니다. 업데이트 된 매핑을 현재 viewModel에 할당하면 충분합니다. 자세한 내용은 this link을 확인하십시오. 오브젝트 구성 파트 사용자 정의를 찾으십시오.
마지막 질문은 무엇로드 프로세스가 너무 복잡하지 않고 최종 배열에 항목이 할 수있는 가장 좋은 방법은, 이전에 유지 모든 항목을 반복하고 하기 위해 항목의 속성을 채우는 등 로 선언 된 메소드?
내가 아는 바로는 당신의 객체 구현으로 이것을 할 수있는 쉬운 방법이 없다는 것입니다. 당신의 물건은 단순하지 않습니다. 그들은 데이터와 함수를 함께 포함합니다. 따라서 사용자 정의 함수를 정의해야합니다. 그러나 당신이 이것을 분리 할 수 있다면, 당신은 객체 생성을 커스터마이징 할 필요가 없다.정의가 상기 정의 함수를 작성하지 않고는 ko.mapping.fromJSON (newMetaDataArray {} MetadataViewModelInstance.MetadataArray)을 호출 할 수있는 이러한 구조
--> Metadata : which contains only simple data
--> MetadataViewModel : which contains Metadata observableArray and its Metadata manipulator functions
: 두 개의 다른 물체에 MetadataViewModel 분리해서 예를 들어
매핑 프로세스.
글쎄! 그것은 매우 완전한 대답입니다! 알겠습니다. 그것은 매력처럼 작동했습니다. 그러나 모델의 복잡성으로 인해 서버의 각 속성을 클라이언트로 전달하게됩니다. 즉, 새 속성을 추가하면 오류가 발생할 확률이 높은 코드가 변경된다는 의미입니다. – ClayKaboom