Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Как вызвать callback при удалении из store? (https://javascript.ru/forum/extjs/34853-kak-vyzvat-callback-pri-udalenii-iz-store.html)

moonlight2 22.01.2013 01:47

Как вызвать callback при удалении из store?
 
Всем привет.

Не могу получить колбэк вот при таком удалении ячейки. Какие еще могут быть варианты?

onIconClick: function(grid,cell,row,col,el) {

        var store = this.getStore('File');
        var rec = store.getAt(row); 
        var iconName = el.getTarget().dataset.qtip;
        me = this;
        
        switch(iconName) {
            case 'Delete':
                me.store.remove(rec);                       // вот это место, в котором нужно получить ответ сервера
                break;
            case 'Download':
                location.href = BASE_URL + "/file.htm?hash=" + rec.data.hash;  
                break;    
            case 'Share':
                this.shareWnd.show();
                break;
        }
    }


Мое хранилище:

Ext.define('App.store.File', {   
    extend: 'Ext.data.Store',
    model: 'App.model.File',
    autoLoad: false,
    autoSync: true,
    pageSize: 7,
    proxy: {
        type: 'ajax',
        url: 'data/upload.htm',
        actionMethods: {
            create: 'POST',
            read: 'GET',
            update: 'PUT',
            destroy: 'DELETE'
        },
        reader: {
            type: 'json',
            successProperty: 'success',
            root: 'files',
            messageProperty: 'message'
        },
        writer: {
            type: 'json',
            writeAllFields: false,
            root: 'files'
        },
        listeners: {
            exception: function(proxy, response, operation){
                Ext.MessageBox.show({
                    title: 'REMOTE EXCEPTION',
                    msg: operation.getError(),
                    icon: Ext.MessageBox.ERROR,
                    buttons: Ext.Msg.OK
                });
            }
        }
    }
});

nekto_O 22.01.2013 08:57

me.store.remove(rec);
этот метод удаляет запись локально, не обращаясь к серверу, вам нужно сначала "сказать" серверу о необходимости удаления такой-то записи, а уже в callback - функции удалить запись из хранилища, например один из вариантов:

me.store.destroy({
   params: { recordId: rec.get('id') },
   callback: function(p, o) {
      // а вот здесь в зависимости от ответа сервера уже решать что делать дальше
      if( o.success ) {
          me.store.remove(rec);
      } else {
          Ext.Msg.alert('Error', o.error.statusText);
      }
   }
});

moonlight2 22.01.2013 14:11

nekto_O,
Большое спасибо! Проблема решена.


Часовой пояс GMT +3, время: 22:35.