我正在研究ExtJS应用程序。我想知道如何将深层嵌套的JSON数据加载到gridpanel中。
我的示例JSON如下:
{
"Users": [
{
"id": "1",
"status": "2",
"name": "Sample",
"email": {
"first": "sample@gmail.com",
"second": "sample2@gmail.com"
},
"feeType": [
{
"name": "Asset-class",
"fee": "20",
"billing": "flat"
},
{
"name": "Asset-class",
"fee": "20",
"billing": "flat"
}
]
},
{
"id": "2",
"status": "3",
"name": "Test",
"email": {
"first": "test@gmail.com",
"second": "test@gmail.com"
},
"feeType": []
}
]
}
我定义了三个与用户,电子邮件和费用类型数组相关的模型。还要正确定义所有关联。
我在gui上有两个网格。第一个网格需要Users数组的数据。所以这个网格正在正确加载数据。因为我使用了dataIndex。它还加载了我在模型定义中使用的电子邮件值
mapping : "email.first"
我在第一个网格上有按钮。单击此网格按钮,将打开另一个网格,这需要“feeType”数组的数据。但是这第二个网格没有加载数据。以下是我所采用的方法:
将root用户定义为“Users”。在store.load()
上,我将第二个商店变成了像这样的变量
var store2=store.feeType()
现在在第二个网格中将此变量作为store传递。像这样
store:store2
因此,当我使用代理作为内存时,数据从feeType数组正确加载到第二个网格,但是当我将代理更改为“rest”时(因为数据意味着来自REST服务),数据不会加载到第二个网格中。为什么?我认为原因是变量store2不包含任何商店;这就是grid2没有显示数据的原因。但是为什么它以内存作为代理工作呢。
Sencha ExtJS是完整的框架。应该有一种方法将嵌套数据加载到网格中。我已经定义了所有商店和模型。
修改
经过多次尝试后,我也可以在嵌套网格中加载嵌套数据。它的工作正常,代理作为休息。所以我相应地定义了所有模型和一个商店。
现在我希望如果用户更改或更新网格值grid1以及网格2值,它应该更新JSON并发送回其余服务。所以即使我实现了这一点。但是一个问题正在发生。当用户更新网格的行并单击按钮时,在此按钮的单击事件上,我编写了store.sync()。
因此它正在更新json并将此更新的JSON发送到休息服务。但这里有一个问题。例如,如果网格中有2行,并且用户更新两行,然后单击按钮,则更新api,即两次调用其余服务。为什么呢?
理想情况下应该只调用一次,对吧?但是在这里它被调用两次,每次调用时,当我检查我在服务端得到的更新数据时,它返回每行的更新数据。例如,如果网格中有3行,它将调用update restservice三次。不应该这样。
只需将所有更新保留在一个JSON中而不是3次调用服务器并生成3个更新的JSON,它应该调用其余服务。