2014-02-24 3 views
0

와 자식 개체를 확장.이 JSON 객체를 고려 녹아웃 매핑

var mapping = { 
    'BusinessModels': { 
     create: function(options) { 
      return new function() { 
       var self = options.data; 
       self.SelectedBusiness = ko.observable(); 
       self.Businesses.unshift({ Id: 0, Name: 'All Clients' }); 
       ko.mapping.fromJS(self, {}, this); 
      }; 
     } 
    }, 
    'Reports': { 
     create: function (options) { 
      return new function() { 
       var self = options.data; 
       self.Value = ko.observable(); 
       ko.mapping.fromJS(options.data, {}, this); 
      }; 
     } 
    } 
}; 

var model = ko.mapping.fromJSON(raw, mapping); 
ko.applyBindings(model); 

나는 자식 개체 "보고서"Value라는 ko.observable 객체를 제공해야합니다. ko.mapping에서이 작업을 수행하려면 어떻게해야합니까?

+0

나는 당신이 무엇을 요구하는지 잘 모르겠습니다. 원하는 구조로 수동으로 생성하는 경우 "after"객체를 게시 할 수 있습니까? –

+0

내 의견이 업데이트되었습니다. 아이에게 속성을 추가하기 만하면 매핑이 작동하지 않습니다. – dimiguel

답변

0

글쎄, 빨리. 나는 대답을 알아 냈다.

var mapping = { 
    'BusinessModels': { 
     create: function (options) { 
      return new function() { 
       var self = options.data; 
       self.SelectedBusiness = ko.observable(); 
       self.Businesses.unshift({ Id: 0, Name: 'All Clients' }); 
       ko.mapping.fromJS(self, mapping, this); 
      }; 
     } 
    }, 
    'Reports': { 
     create: function (options) { 
      return new function() { 
       var self = options.data; 
       self.Value = ko.observable(); 
       ko.mapping.fromJS(self, mapping, this); 
      }; 
     } 
    } 
}; 

오히려 ko.mapping.fromJS(self, {}, this)를 사용하는 것보다 내가 ko.mapping.fromJS(self, mapping, this)을 사용했다. 그 이유는 Reports가 BusinessModel의 중첩 된 개체이기 때문입니다.

+1

나는 거의 같은 일을 게시하려하고 있었다. ko.mapping.fromJS는 새로운지도를 시작하고 매핑 구성을 제공하지 않으면 기본지도 만 수행합니다. 보고서가 BusinessModels의 자식이라는 사실은 부적합합니다. 보고서 정의 만 포함하는 fromJS 함수에 명시적인 맵을 제공하고 외부 매핑을 전달하지 않고 Reports fromJS 호출에 다시 전달하면 JSON 필드 이름이 반복되는 경우 무한 루프가 발생할 수 있습니다 –

+0

감사합니다. 당신의 도움! – dimiguel