2014-04-23 36 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);