Как создать несколько корневых JSON для магазина ExtJS? - PullRequest
0 голосов
/ 17 февраля 2012

Я хочу создать строку JSON на стороне сервера с 2 root.Я использую ExtJS 3.2.Я хочу использовать первый корень для загрузки данных в сетку, а второй - заполнить форму различными данными.Я создаю строку JSON на стороне сервера следующим образом:

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

Давайте предположим, что второй root имя summary , а второй idProperty is summaryID .Как я могу реализовать это и где я могу добавить сводные данные?Спасибо всем.

1 Ответ

4 голосов
/ 19 февраля 2012

Не существует автоматики, поскольку вы готовы это сделать. У меня была такая же проблема на в этом проекте , и я выяснил, как автоматически создавать несколько хранилищ из JSON response.put следующий код перед вашими сеткамизагружены в 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.root1 и MA.store.root2, где MA - это пространство имен вашего приложения (и вы должны изменить его на любое пространство имен вашего приложения). Этот код предназначен для extjs4, и вам может потребоваться внести некоторые изменения, чтобы он работал встарые версии. Надеюсь, это поможет.

...