UZER2006
@UZER2006

Подмена функций в Ext.JS?

Возникли проблемы при подмене некоторых функций в новом Ext.JS.

Задача заключается в необходимости добавления обработки текста ответа в DirectEvent. Обработка происходит с callback.

Разными костыльными методами я почти решил задачу, но теперь встала проблема. При отправке текста на расшифровку мне надо остановить дальнейшее выполнение функции success. А оно там просто не предусмотрено!

Вот часть кода:
Ext.net.DirectEvent = new Ext.data.Connection({
	//...всякие параметры...
	listeners : {
	beforerequest : {
		fn : function (conn, options) {
		//...кроме всего прочего, здесь объявляются локальные функции и переменные
		options.success = function (response, options) {
			var o = options;
			removeMask(o);
			//...
			var parsedResponse = o.scope.parseResponse(response, options);
			//вот здесь надо оборвать, если parsedResponse пустой.
			//...
		}
	},
	//...
});


Ясное дело, я не хочу в свой код дублировать и править тело слушателя beforerequest. Потому было решено добавить ещё одного слушателя, в котором заменить функцию success.
Ext.net.DirectEvent.addListener('beforerequest',function(req,o) {
		debugger;
		eval('o.success = '+o.success.toString().split('var parsedResponse = o.scope.parseResponse(response, options);').join('var parsedResponse = o.scope.parseResponse(response, options); if (!parsedReaponse) return;debugger;'));
		return true;
	});


Но в таком случае (да и в любом другом, наверное), теряется контекст выполнения. Например, функция removeMask объявлена в локальном контексте оригинального слушателя beforerequest.

Собственно, вопрос: Как исправить контекст или каким другим адекватным способом решить задачу?

Переделать функцию обработки тела ответа (убрать callback) нет возможности, сразу прошу ничего подобного не советовать. Нужно именно любым способом сделать корректно обрыв выполнения success при нулевом ответе parseResponse.

Если не заменять функцию success, там и так происходит обрыв на следующей строке с ошибкой (cannot read property of undefined), но хочу, чтоб нормально и без ошибок. throw тоже не подходит.
  • Вопрос задан
  • 3412 просмотров
Решения вопроса 1
shai_hulud
@shai_hulud
а чем «return false» не подходит?
согласно исходникам он должен прервать исполнение запроса
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы