【问题标题】:How to create multiple rooted JSON for ExtJS store?如何为 ExtJS 商店创建多个有根的 JSON?
【发布时间】:2012-03-08 10:12:44
【问题描述】:

我想在服务器端创建一个带有 2 个根的 JSON 字符串。我正在使用 ExtJS 3.2。我想使用第一个根将数据加载到网格,第二个是用不同的数据填充表单。 我正在像这样在服务器端创建 JSON 字符串;

{
    metaData: {
        "idProperty": "reportID", 
        "root": "data", 
        "successProperty": "success"
    }, 
    "success": true, 
    "data": [
    {
        "ID": 1, 
        "name": "Jon", 
        "surname": "Doe"
    }]
}

假设第二个 root 名称是 summary,第二个 idPropertysummaryID。我该如何实现这一点,在哪里可以添加汇总数据? 谢谢大家。

【问题讨论】:

  • 我们可以使用,{ "success": true, "root1": [ { "ID": 1, "name": "Jon", "surname": "Doe" }, { "ID": 2, "name": "Jane", "surname": "Doe" } ], "root2": [ { "ID": 1, "name": "Jack", "surname": "Brown" }, { "ID": 2, "name": "Chris", "surname": "Brown" } ] }

标签: json extjs grid store


【解决方案1】:

没有你愿意做的自动魔法。我在this project 上遇到了同样的问题,我想出了如何从 JSON 响应自动创建多个商店。在加载网格之前输入以下代码。在 extjs4 ,我将以下代码放在 app.js 中,以便在应用程序初始化时创建商店。商店将自动创建,具体取决于 JSON 返回的内容:

    Ext.Ajax
                    .request({
                        url : './account/getadminstores',
                        callback : function(options, success, response) {
                            var json = Ext.decode(response.responseText);
                            var adminStores = new Array();
                            // setup and intitialize on the fly stores
                            for ( var key1 in json) {
                                var storeFields = new Array();
                                for ( var key2 in json[key1]) {// if
                                    // (i==1){break;}
                                    // console.log(key2);
                                    for ( var key3 in json[key1][key2]) {
                                        storeFields.push(key3);
                                    }
                                    break;
                                }
                                ;
                                Ext.define('MA.store.' + key1, {
                                    extend : 'Ext.data.Store',
                                    fields : storeFields,
                                    storeId : key1,
                                    id : 'MA.store.' + key1,
                                    data : json[key1],
                                proxy: {
                                    type: 'ajax',
                                    url : './account/getadminstores',
                                    reader: {
                                        type: 'json',
                                        root: key1
                                    }
                                },
                                autoLoad: true
                                });
                                Ext.create('MA.store.' + key1);
                            }
                            ;

为您的案例创建的商店将是 MA.store.root1and MA.store.root2which MA 是您的应用程序名称空间(您应该将其更改为您的应用程序名称空间)。此代码适用于 extjs4,您可能需要进行一些修改它适用于旧版本。希望对您有所帮助。

【讨论】:

  • 我不能投票,因为它需要 15 个声誉:S 但我接受了你的回答。
  • 谢谢。我经历了很多痛苦来写这个痛苦之王。它的 GNU/GPl 许可,你可以在任何你喜欢的地方使用它。
  • 感谢您的出色工作。
猜你喜欢
  • 1970-01-01
  • 2012-10-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 2011-12-16
  • 2015-10-22
  • 1970-01-01
相关资源
最近更新 更多