Как отображать ошибки при сохранении изменений в ExtJS4 GridPanel? - PullRequest
0 голосов
/ 04 января 2012

Если у меня есть магазин, подключенный к Ext.grid.GridPanel, и я возвращаю ошибки с сервера, как я могу передать информацию из ответа пользователю?

Так, например

Ext.define('BC.data.Model.DnsZoneFile', {
    extend: 'Ext.data.Model',
    fields: [
         { name :'dnsZoneFileId'},
         { name :'origin'},
         { name :'serialNumber', type: 'int', defaultValue: 2011122001},
         { name :'status', defaultValue: 'PENDING_UPLOAD'},
         { name :'clientId', type: 'int', defaultValue: 1},
         { name :'ttl', type: 'int', defaultValue: 120}
    ],
    idProperty: 'dnsZoneFileId',
    idgen: {
        type: 'sequential',
        seed: 1,
        prefix: 'New'
    },
    proxy: {
        type: 'ajax',
        api: {
            create : '/dns/zone-file/xhr-put',
            read   : '/dns/zone-file/xhr-get',
            update : '/dns/zone-file/xhr-post',
            destroy: '/dns/zone-file/xhr-delete'
        },
        reader: {
            type: 'json',
            root: 'zoneFiles',
            totalProperty: 'total'
        },
        writer: {
            type: 'json',
            allowSingle: false
        }
    }
});

Как указать обратный вызов, который будет обрабатываться, если API на /dns/zone-file/xhr-put возвращает какую-то ошибку?

1 Ответ

1 голос
/ 04 января 2012

Ext.data.proxy.Ajax предоставляет только одно событие с именем exception, которое вызывается для всех операций; однако обработчик события получит выполняемую операцию, которая вызвала исключение. Поэтому вы можете искать операцию create в обработчике событий exception следующим образом:

    // ...
    proxy: {
        type: 'ajax',
        api: {
            create : '/dns/zone-file/xhr-put',
            read   : '/dns/zone-file/xhr-get',
            update : '/dns/zone-file/xhr-post',
            destroy: '/dns/zone-file/xhr-delete'
        },
        reader: {
            type: 'json',
            root: 'zoneFiles',
            totalProperty: 'total'
        },
        writer: {
            type: 'json',
            allowSingle: false
        },
        // here is the event handler
        listeners: {
            exception: {
                fn: function (thisProxy, responseObj, operation, eventOpts) {
                    // do error handling for 'create' operation
                    if (operation.action === 'create') {
                        // your code here
                    }
                }
            }
        }
    },
    // ...

Прочтите о Ext.data.proxy.Ajax , чтобы увидеть, как работает опция прокси listeners и exception, а также Ext.data.Operation что передается как operation в обработчике exception.

...