Как создать более одного магазина JSON из запроса get? - PullRequest
1 голос
/ 03 сентября 2011

Предположим, у меня есть это веб-приложение, созданное с использованием extjs4 на моей стороне клиента и контроллера действий Zend Framework на стороне сервера.У меня есть массив массивов на стороне сервера, чтобы они могли быть выведены как JSON для клиента. Когда я хочу создать только одно хранилище, обычный способ работает так:

    Ext.define('MA.store.AdminResources', {
extend : 'Ext.data.Store',
fields : [ {
    name : 'id'
}, {
    name : 'name'
} ],
autoLoad : true,
proxy : {
    type : 'ajax',
    url : './account/adminresources',
    reader : {
        type : 'json'
        //,root : 'users'
    }
}

});

что, если бы я хотелсоздать несколько хранилищ JSON из одного HTTP-запроса к серверу?этот сервер не будет получать удаленный прокси-запрос для каждого магазина, и один запрос будет сделан для ВСЕХ магазинов.Вот пример моего JSON, который возвращается сервером:

{
"adminsettings"{"userid":3333,"primaryemail":"1@1.com","firstname":"","middlename":null}
,"countries":{"AD":"Andorra","AE":"UnitedArabEmirates","AF":"Afghanistan"...}
,"languages":{"aa":"Afar","ab":"Abkhazian","ace":"Achinese","ach":"Acoli"...
}}

Как JSON-хранилища для настроек администратора, стран и языков могут быть созданы с помощью всего одного http-запроса к серверу?возможно мне нужно определить один прокси и 3 читателя?!

Ответы [ 2 ]

5 голосов
/ 04 сентября 2011

Как вы можете видеть в документации, вы можете определить хранилище без прокси:

Ext.create('Ext.data.Store', {
    model: 'User',
    data : [
        {firstName: 'Ed',    lastName: 'Spencer'},
        {firstName: 'Tommy', lastName: 'Maintz'},
        {firstName: 'Aaron', lastName: 'Conran'},
        {firstName: 'Jamie', lastName: 'Avins'}
    ]
});

, тогда легко сделать ajax-запрос и onSuccess загрузить данные вручную:

Что-то вроде этого:

adminSettings = Ext.create('Ext.data.Store', {model: AdminSettings});
countries = Ext.create('Ext.data.Store', {model: Country});

Ext.ajax.request({
    url: './account/adminresources',
    success: function(response) {
        var json = Ext.decode(response.responseText);
        adminsettings.loadData(json.adminsettings);
        countries.loadData(json.countries);
        //...
    } 
});
1 голос
/ 05 сентября 2011

Читая на сетке учебного центра extjs faq я нашел точный вопрос и ответ на свой вопрос. Вот вопрос и ответ:

Загрузка нескольких магазинов одним запросом AJAX?

Здесь также есть пример использования XML здесь

отображать данные для нескольких хранилищ данных из одной строки json, возвращаемой как часть одного http-запроса.

Вариант 1: ( см. Эту тему )

//create a JSON object:
{
dataStore1: /*1st json string */,
dataStore2: /*2nd json string */
}
//decode the json packet...
var json = Ext.decode(response.responseText);
//load the stores:
store1.loadData(json.dataStore1);
store2.loadData(json.dataStore2);

Вариант 2:

 //create a JSON object:
 {
 dataStore1: /*1st json string */,
 dataStore2: /*2nd json string */
 }
 //decode the json packet...
 var json = Ext.decode(response.responseText);
 //create new proxy data for stores as hendricd mentioned:
 store1.proxy.data = json.dataStore1;
 store2.proxy.data = json.dataStore2;
 //load stores
 store1.load();
 store2.load();

 //where stores' proxy has to be defined like this:
 proxy: new Ext.ux.data.BufferedPagingMemoryProxy([])
 //I guess this can be used in case someone is using PMP (paging memory proxy)
...