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

Javascript 将嵌套的JSON数据加载到gridpanel中,javascript,json,extjs,extjs4.2,extjs-mvc,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"

我正在开发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上有两个网格。第一个网格需要用户数组的数据。所以这个网格正确地加载了数据。正如我使用的dataIndex一样。它还加载电子邮件值,正如我在模型定义中使用的那样

 mapping : "email.first"
我在第一个网格上有一个按钮。单击此网格按钮,将打开另一个网格,它需要“feeType”数组的数据。但是第二个网格没有加载数据。以下是我研究的方法:

将具有根目录的存储定义为“用户”。在
store.load()
中,我将第二个存储区放入如下变量中

   var store2=store.feeType()
      store:store2
现在在第二个网格中,将此变量作为存储传递。像这样

   var store2=store.feeType()
      store:store2
所以,当我使用代理作为内存时,数据会从feeType数组正确地加载到第二个网格中,但当我将代理更改为“rest”(因为数据来自rest服务)时,数据不会加载到第二个网格中。为什么?我认为原因是变量store2不包含任何存储;这就是为什么grid2不显示数据。但是为什么它使用内存作为代理呢

Sencha ExtJS是完整的框架。应该有办法将嵌套数据加载到网格中。我已经定义了所有的商店和模型

编辑

在尝试了很多之后,我也能够在嵌套网格中加载嵌套数据。使用代理作为rest时,其工作正常。因此,我定义了所有模型和一个相应的存储

现在,我希望如果用户更改或更新网格值grid1和grid2,它应该更新JSON并发送回rest服务。就连我也做到了。但有一个问题正在发生。当用户更新网格中的行并单击按钮时,在该按钮的单击事件中,我编写了store.sync()

所以它正在更新json并将更新后的json发送给rest服务。但这里有一个问题。例如,如果网格中有两行,用户更新这两行,然后单击按钮更新api,即调用rest服务两次。为什么?

理想情况下应该只调用一次,对吗?但在这里它被调用两次,每次调用时,当我检查我在服务端得到的更新数据时,它都返回每行的更新数据。例如,如果网格中有3行,它将调用updaterestservice三次。不应该是这样


它应该调用rest服务一次,只在一个JSON中保存所有更新,而不是对服务器进行3次调用并生成3个更新的JSON

请回答某人。也许你应该试试Ajax商店。将读取器类型设置为json。你能添加代码吗?你的商店是什么样子的?不清楚如何获取包含数据的网格。所以您将数据加载到全局变量中,然后分离到数组中,然后加载到网格中,或者如何将其用作嵌套网格中的存储。store:store.getAt(rowIndex.feeType();其中rowIndex是用户在父网格上单击的行。事实上,它也显示了数据,但当我将其更改为rest代理时,它不会在嵌套网格中加载数据。即使使用ajax,它也不会加载数据。因此,将其作为内存代理,并可以很好地使用它。存储定义很简单,其中包含数据:data(如上面的帖子所示)、proxy:memory和reader{type:json,root:Users},是的,这个存储定义保存在一个名为store的全局变量中。你能给出一个工作示例吗?我们帮助你会容易得多