воскресенье, 20 июля 2014 г.

Отслеживаем успешность CRUD операции на ExtJS 5

Доброго времени суток!

Работаю с ExtJS 5. У меня возникла следующая проблема:

через API на сервер отправляется запрос. Сервер проверяет входящие параметры и либо возвращает JSON с параметром success = true,  либо success = false. Мне необходимо было проверить значение параметра success - в случае успеха (true) программа работает в штатном режиме, если наоборот (false), неудачная запись удаляется из store, и программа продолжает свою работу без каких-либо ошибок.

Казалось бы, сервер вернул false и какое-то сообщение, значит возникла какая-то авария. Но на самом деле это не так. ExtJS воспринимает подобные ответы, как штатные, поэтому по умолчанию не "ловит" такие ошибки.

А решается эта проблема просто.  Стор имеет пустые функции onCreateRecords, onUpdateRecords, onDestroyRecords, которые можно переопределить. Они вызываются после добавления, обновления и удаления записи соответственно. Причем описываются  ни в listeners, ни в proxy, а в самом store.

Описание store имеет следующий вид:
Ext.define('некоторое название стора',{
 extend : 'Ext.data.Store',
 model : 'некоторая модель стора',
 autoSync: true,
 proxy : {
  type : 'ajax',
  api: {
    create: '...',  // сервис создания записи
    update: '...',  // сервис обновления данных
    delete: '...'   // сервис удаления данных
  },
  url : 'некоторый url', // сервис чтения данных
  reader : {
   type : 'json',
   rootProperty : 'data',
   totalProperty: 'totalCount',
   successProperty: 'success'
  }
 },
 remoteFilter: true,
 remoteSort: true, 
 onUpdateRecords: function(records, operation, success) {
   if(!success) {
     this.rejectChanges(); // удаление из стора неудачной записи
   };
 },
 onCreateRecords: function(records, operation, success) {
  if(!success) {
    this.rejectChanges();
  };
 },
 onDestroyRecords: function(records, operation, success) {
   if(!success) {
     this.rejectChanges();
    };
 }
});

Спасибо за внимание. Всем успехов! :)

Комментариев нет:

Отправить комментарий