如何将多维/嵌套json加载到商店?

时间:2014-04-23 08:33:15

标签: json extjs nested sencha-touch-2 store

所以我试图将从网络服务收到的数据加载到sencha touch 2商店。 数据是嵌套的JSON,但它包含多个dataArrays。

我正在使用sencha touch 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"
  }
]}

我也尝试过协会,但无济于事。

根据谷歌Chrome控制台,它不会制作任何包含数据的对象。我只得到一个带有所有值的对象" null"。

我的endgoal是能够在单独的表中显示每个dataArray。所以DataArrayOne的表,DatarrayTwo的表......数据本身没有链接。它们只是必须在视图上显示的细节。 约翰史密斯与苹果无关,就像他没有买的那样。苹果只是作为要展示的项目。

由于它们已经过时,我看到但尚未理解的可能解决方案是:

  • ChildStores:您有一个接收数据的主存储,然后 您根据rootProperty将数据拆分到其他商店。我有 不知道如何做到这一点,我不确定它是否会起作用 所有。
  • 协会,以防我做错了。我不认为他们 是必要的,因为数据并没有相互关联,但它是一部分 " DataCollection"虽然。

有人可以发一个例子来说明如何处理这种不寻常的(?)嵌套json。 或任何其他解决方案,这将导致能够随意使用3个dataArrays。

提前致谢

1 个答案:

答案 0 :(得分: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);