所以我试图将从网络服务收到的数据加载到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的表......数据本身没有链接。它们只是必须在视图上显示的细节。 约翰史密斯与苹果无关,就像他没有买的那样。苹果只是作为要展示的项目。
由于它们已经过时,我看到但尚未理解的可能解决方案是:
有人可以发一个例子来说明如何处理这种不寻常的(?)嵌套json。 或任何其他解决方案,这将导致能够随意使用3个dataArrays。
提前致谢
答案 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);