将嵌套的JSON数据加载到gridpanel中

时间:2014-06-21 06:12:52

标签: javascript json extjs extjs4.2 extjs-mvc

我正在研究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,它应该调用其余服务。

0 个答案:

没有答案