2014-04-23 2 views
0

knockout.js를 사용하여 complexe 뷰를 작성하려고하는데 몇 가지 문제가 있습니다. 뷰 모델의 컨텐츠 데이터가 JSON으로 ajax를 통해로드됩니다. JSON은 상당히 복잡하며 관찰 할 수 있어야하고 그렇지 않은 여러 중첩 된 객체가 있습니다. 여기 Knockout : 관찰 가능한 중첩 요소

{ 
     BaseData:{ 
      Title:'BaseDataTitle', 
      DataArray:[{Title:'obs1'}],//this should be observable 
      SecondArray:[{Title:'notobs1'}],//this should not be observable 
     }, 
     DataArray:[{Title:'obs1'}] 
    } 

http://jsfiddle.net/wPs7e/

녹아웃으로 그렇게 할 가능성이있다 (진짜 어떤 수준 깊은입니다) 약간의 예입니다?

도움 주셔서 감사합니다.

+2

[mapping-plugin] (http://knockoutjs.com/documentation/plugins-mapping.html) –

+0

@MajorByte를 살펴 보았습니까? 내가 생각하는 대답으로이 주석을 사용해야합니다. – Jeroen

+0

가능한 [특정보기 모델 유형의 JSON 데이터를 녹아웃 observableArray에 매핑] (http://stackoverflow.com/questions/9951521/map-json-data-to-knockout-observablearray-with-specific-view-model- 유형) –

답변

0

개체를 사용하여 작업해야합니다 ... 매핑 플러그 인을 사용할 수 있지만 데이터를 받고 조건부로 바인딩을 적용 할 개체를 만들어야합니다.

당신이 위로 새로운 객체

ko.applyBindings(new KOObject(rawdata)); 

매핑 플러그인이 직렬화 및 녹아웃 데이터의 직렬화 모두 자동화를위한 좋은 아이디어 당신의 바인딩을 적용하기 전에

var KOObject = function(rawdata) { 
    var self = this; 
    self.BaseData = new BaseDataObject(rawdata.BaseData); 
    self.DataArray = rawdata.DataArray; 
} 

var BaseDataObject = function(baseData) { 
    var self = this; 
    self.Title = baseData.Title; 
    // you could keep chaining the creation of objects with this concept 
    self.DataArray = ko.observableArray(baseData.DataArray); 
    self.SecondArray = ko.observableArray(baseData.SecondArray); 
} 

... 그것은 경우 언제나 필요는 없습니다 데이터 세트를 초기화 할 수있는 옵션이 있습니다. 어쨌든 좋은 연습입니다.

+0

도움 주셔서 감사합니다! – user1584028

관련 문제