Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.11.2015, 11:48
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

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"?
Ответить с цитированием
  #2 (permalink)  
Старый 24.11.2015, 12:55
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

По идее код состояния 500 и нужно возвращать с телом { success: 0, message: 'You cannot edit the record' }

у вас нет возможность изменить поведение сервера?
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #3 (permalink)  
Старый 24.11.2015, 13:03
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

на прокси есть событие exception: http://docs.sencha.com/extjs/6.0/6.0...vent-exception
Ответить с цитированием
  #4 (permalink)  
Старый 24.11.2015, 13:15
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Вот как раз и не могу. По конвенции, я возвращаю 200 и json с состоянием. Все прочие коды говорят об исключениях и генерятся на другом этаже приложения.
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2015, 13:16
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

siber-biber, я это событие знаю и пробовал использовать. Оно не срабатывает если код 200.
Ответить с цитированием
  #6 (permalink)  
Старый 24.11.2015, 13:54
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

у меня всё чудесно работает. Правда я на 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
                }
            }
        }
    });
Ответить с цитированием
  #7 (permalink)  
Старый 24.11.2015, 14:39
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

А прокси какого типа? AJAX или REST?
Ответить с цитированием
  #8 (permalink)  
Старый 24.11.2015, 14:53
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

novikov, Ajax
Ответить с цитированием
  #9 (permalink)  
Старый 24.11.2015, 17:54
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Раз уж начали переделывать приватный метод onBatchException, то почему бы не замахнуться на onBatchComplete? Напишите, например, overide этого метода для класса хранилища ProxyStore.

if (!operation.wasSuccessful()) { this.rejectChanges() }

А вообще, Вам нужно для хранилища определить два шаблонных метода:

onCreateRecords(records, operation, success)
onUpdateRecords(records, operation, success)

См. тут
Ответить с цитированием
  #10 (permalink)  
Старый 24.11.2015, 18:38
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

я всё еще не втыкаю в чем проблема ..событие exception на прокси работает всегда ..независимо от кода респонза.
я проверил на ext6.0.0
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отправка всех данных store на сервер shepard90 ExtJS 1 03.04.2013 23:52
ExtJS4 Обход store pauluss ExtJS 4 14.01.2013 14:25
Store: отловить событие success=false posta ExtJS 1 01.03.2012 11:55
Данные из store не успевают попадать в chart kalya ExtJS 0 02.11.2011 14:14
GridPanel "теряет" свой store при многократном вызове экземпляров GridPanel Lokich ExtJS 1 09.09.2011 10:12