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 に答える