Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Ext.ux.ajax.SimManager - как готовить? (https://javascript.ru/forum/extjs/63005-ext-ux-ajax-simmanager-kak-gotovit.html)

Infarch 12.05.2016 12:18

Ext.ux.ajax.SimManager - как готовить?
 
Здравствуйте.

Понадобилось мне некоторые запросы симулировать. Дело казалось несложным, но в результате система не взлетела. Может вы мне что подскажете...

Итак, я подключаю нужный неймспейс в Application.js:
requires: [
		'Ext.window.MessageBox',
		'Ext.tip.QuickTipManager',
		'Ext.ux.ajax.*', // <----------
		...
	],


Далее, в главном контроллере приложения инициализирую менеджер:
var sim = Ext.ux.ajax.SimManager.init({delay: 50});
	sim.register({
		'/fake/success': {
			type: 'json',
			responseText: '{success:true}'
		}
	});


И после этого любой ажакс запрос умирает с ошибкой:
TypeError: me.mgr is undefined
SimXhr.js:62:13


ЧЯНТД?

khusamov 12.05.2016 12:54

А там бага есть с этим me.mgr. Плюс всякие недоделки. Например doDelete не доделан до конца.

khusamov 12.05.2016 12:55

Вот заплатка:


/**
 * Исправление бага: в дефолтном симлете нет ссылки на менеджер.
 */

/* global Ext */

Ext.define("Element.sim.override.ux.ajax.SimManager", {
	
	override: "Ext.ux.ajax.SimManager",
	
	init: function() {
		var me = this;
		
		if (!me.ready) {
			if (!("defaultSimlet" in me)) {
				me.defaultSimlet = new Ext.ux.ajax.Simlet({
					status: 404,
					statusText: "Not Found"
				});
				// Исправление бага: в дефолтном симлете нет ссылки на менеджер.
				me.defaultSimlet.manager = me;
			}
		}
		
		var result = me.callParent(arguments);
		return result;
	}
	
});

Infarch 12.05.2016 13:37

А я как раз запустил сим менеджер, без патчей. Нашел более другую конфигурацию:
var sim = Ext.ux.ajax.SimManager.init({delay: 50,defaultSimlet: null});
	sim.register({
		url: '/fake/success',
		type: 'json',
		responseText: '{success:true}'
	});

Sogl 29.09.2016 08:53

А этот SimManager отправляет реальный запрос? Делаю свое приложение на основе admin-dashboard и там как раз SimManager и JsonSimlet используются. При этом запросов в консоли Firebug никаких не отправляется...
Перенес в свое приложение. И вижу запрос вида:
GET [url]http://myapp.lar/~api/search/users?_dc=1475127343520&page=1&start=0&limit=25[/url]

С 404 ошибкой... естественно, ведь по такому адресу ничего и не живет! Соответственно, я не вижу данных в таблице.

Как отучить его это делать? =)

Infarch 29.09.2016 09:36

SimManager как раз сделан для того чтоб ничего не отправлять. Если затребован ажакс запрос по зарегистрированому в нем урлу то запрос не идет в сеть, а возвращает заданные с симменеджере данные. Ну а в вашем случае проверьте или зареганый урл совпадает с отправляемым.

nohuhu 30.09.2016 02:07

Если вам нужно ответы симулировать в тестах, то можете подключить нашу копию Jasmine из ext/test/lib/jasmine.js и использовать MockAjaxManager. Он в конце файла живёт, простенькое такое чудище. Пример использования можно найти в ext/classic/classic/test/specs/ComponentLoader.js.

И вообще говоря для тестов сурово рекомендую использовать наш Jasmine вместо штатного от Pivotal. Багов оттуда выловлено уже до...много. :/

Sogl 30.09.2016 09:55

Цитата:

Сообщение от Infarch (Сообщение 430184)
SimManager как раз сделан для того чтоб ничего не отправлять. Если затребован ажакс запрос по зарегистрированому в нем урлу то запрос не идет в сеть, а возвращает заданные с симменеджере данные. Ну а в вашем случае проверьте или зареганый урл совпадает с отправляемым.

Да, оказалось при переносе я оставил неправильный URL. Не совпало — уходит обычный запрос, а если все нормально, то консоль молчит и идет эмуляция, необходимые нам данные приходят.
Ну и в require надо было прописать класс с тестовыми данными, иначе тоже не работает.


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