EXT JS Store Proxy: читатели и писатели - PullRequest
3 голосов
/ 29 ноября 2011

В документации я обнаружил, что магазин создан так:

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: "User",
    proxy: {
        type: 'ajax',
        url : 'users.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    }
});

Прокси имеет один url конфиг. Я особенно заинтересован в читателе. Читатель указывает формат обмена данными (json) и корень («пользователи»). Теперь, другими словами, если хранилище настроено так: autoLoad = true, то EXT JS установит Ajax-соединение с URL, указанным для read. Теперь, как бы я настроить писатель для того же магазина выше? Кто-то также расскажет мне об этом: если я настрою писателя, будет ли он использовать тот же URL-адрес, который указан в прокси-сервере? Я все еще запутался в отношении авторов и читателей в контексте кода, который я показал выше, вы могли бы помочь мне использовать приведенный выше пример, чтобы показать конфигурации читателей и писателей. Спасибо.

Ответы [ 2 ]

9 голосов
/ 30 ноября 2011

Вот пример магазина с читателем, писателем и API в моем приложении:

Ext.define('MyApp.store.Tasks', {
    extend: 'Ext.data.Store',
    model: 'MyApp.model.Task',
    sorters : [{
       property: 'idx',
       direction: 'ASC'
    }],
    autoSync:true,
    proxy:{
        type: 'ajax',
        reader: {
            type: 'json',
            root: 'data'
        },
        writer: {
            type: 'json',
            writeAllFields : false,  //just send changed fields
            allowSingle :false      //always wrap in an array
           // nameProperty: 'mapping'
       },
        api: {
               // read:
                create: 'task/bulkCreate.json',
                update: 'task/bulkUpdate.json'
               // destroy:
        }
    },
    listeners : {
        write: function(store, operation, opts){
            console.log('wrote!');
            //workaround to sync up store records with just completed operation
            Ext.each(operation.records, function(record){
                if (record.dirty) {
                    record.commit();
                }
            });
        },
        update:function(){
            console.log('tasks store updated');
        }
    }
});
2 голосов
/ 29 ноября 2011

На самом деле вы правы - он будет использовать тот же URL, что и для читателя.

Прокси является посредником между вашей моделью / магазином на клиенте и кодом вашего сервера на другой стороне. Считыватели используются для чтения данных, и вы можете настроить такие вещи, как форматирование, указать root и т. Д. Авторы отвечают за запросы сохранения / обновления на сервер.

Проверьте эту статью: http://edspencer.net/2011/02/proxies-extjs-4.html

...