2014-04-23 34 views
1

所以我试图加载从Web服务接收到一个煎茶触摸2存储中的数据。 数据嵌套JSON,但它包含多个dataArrays。如何将多维/嵌套json加载到商店中?

我与煎茶触摸2.3.1,一定程度上等于Ext JS的4.2工作。我还没有那么多sencha的经验,但我到了那里。我决定去MVC,所以我希望答案尽可能接近这个:)。

这是JSON我使用的例子:

[ 
    { 
     "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。我不想造成任何不必要的流量,所以我希望能够以某种方式使用这些数据。 我希望能够独立使用每个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" 
    } 
]} 

我尝试过关联,但无济于事。

据谷歌浏览器的控制台,它没有包含数据的任何对象。我只有1个对象的所有值为“null”。

我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);