Javascript.RU

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

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


ЧЯНТД?
Ответить с цитированием
  #2 (permalink)  
Старый 12.05.2016, 12:54
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

А там бага есть с этим me.mgr. Плюс всякие недоделки. Например doDelete не доделан до конца.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #3 (permalink)  
Старый 12.05.2016, 12:55
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

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


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

/* 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;
	}
	
});
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #4 (permalink)  
Старый 12.05.2016, 13:37
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

А я как раз запустил сим менеджер, без патчей. Нашел более другую конфигурацию:
var sim = Ext.ux.ajax.SimManager.init({delay: 50,defaultSimlet: null});
	sim.register({
		url: '/fake/success',
		type: 'json',
		responseText: '{success:true}'
	});
Ответить с цитированием
  #5 (permalink)  
Старый 29.09.2016, 08:53
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

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

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

Как отучить его это делать? =)
Ответить с цитированием
  #6 (permalink)  
Старый 29.09.2016, 09:36
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

SimManager как раз сделан для того чтоб ничего не отправлять. Если затребован ажакс запрос по зарегистрированому в нем урлу то запрос не идет в сеть, а возвращает заданные с симменеджере данные. Ну а в вашем случае проверьте или зареганый урл совпадает с отправляемым.
Ответить с цитированием
  #7 (permalink)  
Старый 30.09.2016, 02:07
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

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

И вообще говоря для тестов сурово рекомендую использовать наш Jasmine вместо штатного от Pivotal. Багов оттуда выловлено уже до...много. :/
Ответить с цитированием
  #8 (permalink)  
Старый 30.09.2016, 09:55
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

Сообщение от Infarch Посмотреть сообщение
SimManager как раз сделан для того чтоб ничего не отправлять. Если затребован ажакс запрос по зарегистрированому в нем урлу то запрос не идет в сеть, а возвращает заданные с симменеджере данные. Ну а в вашем случае проверьте или зареганый урл совпадает с отправляемым.
Да, оказалось при переносе я оставил неправильный URL. Не совпало — уходит обычный запрос, а если все нормально, то консоль молчит и идет эмуляция, необходимые нам данные приходят.
Ну и в require надо было прописать класс с тестовыми данными, иначе тоже не работает.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как передавать данные из html? carder Общие вопросы Javascript 5 27.02.2016 19:46
Как создается function Function(){} ? Cepairda Общие вопросы Javascript 0 10.02.2016 15:03
переманную как условие в if блок xas Общие вопросы Javascript 3 02.02.2016 21:17
initComponent: Как получить данные родителя и как получить store для вызова load()? Пролетарий ExtJS 76 04.07.2015 09:22
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30