Store - контроль статуса синхронизации
Здравствуйте.
У меня есть вот такой стор: Ext.define('SafetyRound.store.MeasurePoint', { extend: 'SafetyRound.store.InsistentStore', requires: ['SafetyRound.model.entity.SafetyRoundMeasurePoint'], model: 'SafetyRound.model.entity.SafetyRoundMeasurePoint', autoLoad: false, storeId: 'measurePointsAll', onBatchException: function (batch, operation) { alert("## MeasurePoint operation failed!"); this.rejectChanges(); }, autoSync: true }); Когда состав строк в нем меняется, autoSync отправляет данные на сервер для обработки. Если обработка по каким либо причинам невозможна, то сервер присылает код состояния 200 и такой вот json: { success: 0, message: 'You cannot edit the record' } Я думал что в этом случае метод onBatchException откатит изменения, и покажет как либо сообщение об ошибке. Во всяком случае такого json хватает чтоб отловить ошибку обработки отдельно взятой модели. По факту, метод срабатывает только тогда, когда сервер возвращает код состояния ошибки, например 500. Можно ли как-нибудь научить стор реагировать на "success: 0"? |
По идее код состояния 500 и нужно возвращать с телом { success: 0, message: 'You cannot edit the record' }
у вас нет возможность изменить поведение сервера? |
на прокси есть событие exception: http://docs.sencha.com/extjs/6.0/6.0...vent-exception
|
Вот как раз и не могу. По конвенции, я возвращаю 200 и json с состоянием. Все прочие коды говорят об исключениях и генерятся на другом этаже приложения.
|
siber-biber, я это событие знаю и пробовал использовать. Оно не срабатывает если код 200.
|
у меня всё чудесно работает. Правда я на load пробовал только:
var someStore = Ext.create("Ext.data.Store", { autoLoad : true, proxy : { type : 'ajax', url : 'foo.js', method : 'GET', reader : { type : 'json' }, listeners : { 'exception' : function () { debugger } } } }); |
А прокси какого типа? AJAX или REST?
|
novikov, Ajax
|
Раз уж начали переделывать приватный метод onBatchException, то почему бы не замахнуться на onBatchComplete? Напишите, например, overide этого метода для класса хранилища ProxyStore.
if (!operation.wasSuccessful()) { this.rejectChanges() } А вообще, Вам нужно для хранилища определить два шаблонных метода: onCreateRecords(records, operation, success) onUpdateRecords(records, operation, success) См. тут |
я всё еще не втыкаю в чем проблема ..событие exception на прокси работает всегда ..независимо от кода респонза.
я проверил на ext6.0.0 |
|
или то же самое при sync-е: https://fiddle.sencha.com/#fiddle/11j2
|
> я всё еще не втыкаю в чем проблема
Посмотрите на сеть в консоли. Ответ сервера 404 Not Found |
да есть такое в фидле ..всё верно. но локально у меня эта штука работала.
щас проверю еще раз |
в фидле с урлами ошибся. щас поправил всё работает как я сказал.
еще я заметил у вас в json вместо false используется 0 ..такой номер не пройдет ..в коде ридера строгая проверка либо false (булевый) либо стоока "false". |
Часовой пояс GMT +3, время: 10:28. |