2014-04-23 1 views
1

그래서 웹 서비스에서받은 데이터를 sencha touch 2 저장소에로드하려고합니다. 데이터는 JSON 중첩되어 있지만 여러 데이터 배열을 포함하도록 만들어졌습니다.다차원/중첩 json을 저장소로로드하는 방법은 무엇입니까?

나는 Sencha Touch 2.3.1을 사용 중이며 Ext JS 4.2와 다소 비슷합니다. 나는 아직 첸차에 대한 그다지 많은 경험이 없지만 거기에 도착하고있다. 나는 MVC에 가기로 결심했다. 그래서 가능한 한 이것에 가까운 대답을하고 싶다. :)

[ 
    { 
     "DataCollection": { 
      "DataArrayOne": [ 
       { 
        "Name": "John Smith", 
        "Age": "19" 
       }, 
     { 
        "Name": "Bart Smith", 
        "Age": "16" 
       } 
      ], 
      "DataArrayTwo": [ 
       { 
        "Date": "20110601", 
        "Product": "Apple", 
        "Descr": "", 
        "Remark": "" 
       }, 
       { 
        "Date": "20110601", 
        "Product": "Orange", 
        "Descr": "", 
        "Remark": "" 
       }, 
       { 
        "Date": "20110601", 
        "Product": "Pear", 
        "Descr": "", 
        "Remark": "" 
       } 
      ], 
      "DataArrayThree": [ 
       { 
        "SomeTotalCost": "400,50", 
        "IntrestPercentage": "3" 
       } 
      ] 
     } 
    } 
] 

하나의 호출을 통해, 나는이 JSON을 얻을 :

는 JSON 내가 사용하고있는 예이다. 불필요한 트래픽을 일으키고 싶지 않으므로 데이터를 어떻게 든 사용할 수 있기를 바랍니다. 각 DataArray를 단독으로 사용할 수 있기를 원합니다.

데이터는 프록시를 통해 가게에 보내집니다 :

Ext.define("MyApp.store.myDataObjects", { 
extend: "Ext.data.Store", 
config: { 
    model: "MyApp.model.myDataObject", 
    proxy: { 
    reader: { 
    type: "json", 
    rootProperty: "DataCollection" 
    }, 
    type: "ajax", 
    api: { 
    read: "https://localhost/Service.svc/json" 
    }, 
    limitParam: false, 
    startParam: false, 
    pageParam: false, 
    extraParams: { 
    id: "", 
    token: "", 
    filter: "" 
    }, 
    writer: { 
    encodeRequest: true, 
    type: "json" 
    } 
    } 
} 
}); 

내가 여기 모델과 붙어 조금입니다. 나는 다음과 같이 보이는 맵핑을 시도했다.

config: { 
    fields: [ { 
    name: "IntrestPercentage", 
    mapping: "Calculation.IntrestPercentage", 
    type: "string" 
    } 
]} 

나는 연관성을 찾았지만 아무 소용이 없다.

Google 크롬 콘솔에 따르면 데이터가 포함 된 개체를 만들지 않습니다. 모든 값이 "null"인 객체는 1 개뿐입니다.

내 endgoal은 각 dataArray를 별도의 테이블에 표시 할 수 있어야합니다. 그래서 DataArrayOne 테이블, DatarrayTwo 테이블 ... 데이터 자체는 링크되어 있지 않습니다. 보기에 표시해야하는 세부 사항 만 있습니다. 존 스미스는 사과와 관련이 없으며 구매하지 않았습니다. 사과는 보여줄 품목으로 거기 다만있다.

때문에 그들이 오래된되기 위해서는 아직 이해되지 본 적이 가능한 솔루션

은 다음과 같습니다

  • ChildStores : 당신이 따라 다른 매장에 데이터를 분할 그런 다음 데이터를 수신 마스터 저장소를 가지고 있고, rootProperty에. 나는 이 방법을 모르겠지만 그것이 작동하는지 모르겠습니다. 모두.
  • 내가 그들을 잘못하고있는 경우에 대비하여. 나는 데이터가 서로 연결되어 있지 않기 때문에 이 필요하다고 생각하지 않지만 "DataCollection"의 부분은 입니다.

이 중독 된 (?) 종류의 중첩 된 json을 처리하는 방법에 대한 예를 게시 해주세요. 또는 임의로 3 개의 데이터 어레이를 사용할 수있게하는 다른 솔루션. 사전

+0

답변이 주어졌습니다. 그러나 더 이상 건설적인 해결책을 환영합니다. 좀 더 흥미로운 점은 예를 들어 프록시를 사용하여 매장 내에서 사키 (Saki)의 답변을 결합한 것을 보는 것입니다. – meru

답변

0

최선을에서

덕분에 별도의 Ext.Ajax.request로 전체 데이터를로드 한 후 성공 콜백 store.loadData을 사용하는 것입니다. 예 :

var data = Ext.decode(response.responseText); 
store1.loadData(data[0].DataCollection.DataArrayOne); 
store2.loadData(data[0].DataCollection.DataArrayTwo); 
store3.loadData(data[0].DataCollection.DataArrayThree); 
관련 문제