Sencha Touch从同一个Json维护不同的商店

时间:2012-10-12 15:38:33

标签: sencha-touch sencha-touch-2

我希望能够在同一个json中维护不同的商店,每个商店的模型都是相同的。每个商店都需要根据其根属性分配进行更新。请参阅下面的示例json,store和model,在这种情况下,每个商店都将根据json的root属性值(类别1,类别2等)进行更新。目标是能够将我的应用程序中的嵌套列表动态绑定到不同的商店,而不是调用setProxy来更改单个商店的URL设置。此外,json需要采用这种格式。感谢您的帮助,如果我能提供澄清或回答任何问题,请告诉我。

JSON:

{
    "items": [
        {
            "name": "category 1",
            "status": "",
            "displaytext": "",
            "items": [
                {
                    "name": "",
                    "status": "",
                    "displaytext": "",
                    "items": [
                        {
                            "name": "",
                            "status": "",
                            "displaytext": "",
                            "items": [
                                {
                                    "name": "",
                                    "status": "",
                                    "displaytext": "",
                                    "leaf": true
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name": "category 2",
            "status": "",
            "displaytext": "",
            "items": [
                {
                    "name": "",
                    "status": "",
                    "displaytext": "",
                    "items": [
                        {
                            "name": "",
                            "status": "",
                            "displaytext": "",
                            "leaf": true
                        }
                    ]
                }
            ]
        },
        {
            "name": "cateory 3",
            "status": "",
            "displaytext": "",
            "items": []
        },
        {
            "name": "category 4",
            "status": "",
            "displaytext": "",
            "items": []
        }
    ]
}

型号:

Ext.define('MyApp.model.myModel', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {
                name: 'name',
                type: 'string'
            },
            {
                name: 'status',
                type: 'string'
            },
            {
                name: 'displaytext',
                type: 'string'
            }
        ]
    }
});

存储1,2,3等:

Ext.define('MyApp.store.storeCategory1', {
    extend: 'Ext.data.TreeStore',
    requires: [
        'MyApp.model.myModel'
    ],

    config: {
        model: 'MyApp.model.myModel',
        storeId: 'myStore',
        autoLoad: false,
        proxy: {
            type: 'ajax',
            url: '/path/to/file.json',
            reader: {
                type: 'json',
                rootProperty: 'items'
            }
        }
    }
});

1 个答案:

答案 0 :(得分:0)

我认为您最好的选择是独立于Store的代理服务器请求。成功时,根据需要将数据拆分到不同的商店。以这种方式预处理数据是很好的,特别是如果您需要将一个大数据响应分成多个数据存储。例如:

Ext.Ajax.request({
    url: 'path/to/file.json',
    success: function(response){
        // process server response here
        var json = Ext.decode(response.responseText);
        for(var i=0, l=json.items.length, i<l; i++){
            // start distributing the data to your different stores here
        }
    }
});

希望这有帮助。