0

我正在使用Store具有声明的代理api。我可以使用 处理异常exception listener,但是当成功删除记录时,如何向用户发送消息?

我的商店看起来像:

Ext.define('ContatosApp.store.PsContatosStore', {
    extend: 'Ext.data.Store',

    requires: [
        'ContatosApp.model.PsContatosModel'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            autoLoad: true,
            autoSync: true,
            model: 'ContatosApp.model.PsContatosModel',
            storeId: 'MyJsonStore',
            pageSize: 15,
            trailingBufferZone: 20,
            proxy: {
                type: 'ajax',
                api: {
                    read: 'contact/list',
                    create: 'contact/save',
                    update: 'contact/update',
                    destroy: 'contact/delete'
                },
                directionParam: 'order',
                limitParam: 'max',
                startParam: 'offset',
                url: '',
                reader: {
                    type: 'json',
                    root: 'contatos'
                },
                writer: {
                    type: 'json',
                    root: ''
                },
                listeners: {
                    exception: {
                        fn: me.onAjaxException,
                        scope: me
                    }
                }
            }
        }, cfg)]);
    },

    onAjaxException: function(proxy, response, operation, eOpts) {
        var data = Ext.JSON.decode(response.responseText);
        Ext.MessageBox.show({
            title: 'Error',
            msg: data.message,
            icon: Ext.MessageBox.ERROR,
            buttons: Ext.Msg.OK
        });
    }

});

我的删除按钮处理程序是:

var grid = Ext.ComponentQuery.query('#MyGridPanel');
var selection = grid[0].getSelectionModel().getSelection()[0];
if (selection) {
  Ext.getStore('PsContatosStore').remove(selection);
}

另外,如果我从商店中删除记录,但 ajax 调用返回错误,我需要重新加载网格以再次显示记录,或者有更好的方法来处理这个问题?

4

2 回答 2

3

您可以使用requestcomplete对所有 ajax 调用全局执行此操作。

对于特定代理,您可以使用afterRequest

        proxy: {

            ...

            listeners: {
                exception: {
                    fn: me.onAjaxException,
                    scope: me
                }
            afterRequest: function( aRequest, aSuccess ) {
                console.log( aSuccess );
            }
        }
于 2013-05-28T10:28:48.417 回答
2

查看sync()的文档。您可以传递成功和失败回调,当从服务器接收到成功响应或错误时将触发这些回调。

至于将记录放回网格中,请检查商店的rejectChanges()方法。我通常在我的失败回调中调用它。

于 2013-05-28T01:42:22.157 回答