Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.11.2015, 14:04
EndoCrinologist вне форума Посмотреть профиль Отправить личное сообщение для EndoCrinologist Найти все сообщения от EndoCrinologist
  № 1  
Ответить с цитированием
EndoCrinologist
 
Аватар для EndoCrinologist

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
По умолчанию Как вернуть значение из события?

Есть вот такая корявая функция отправки/получения данных с сервера.
Код AS3:
function senderData(id:Number, param:String, script:String):Boolean
{
	var sendLoader:URLLoader = new URLLoader();
	var sendRequest:URLRequest = new URLRequest('mydomen'+script+'.php' + '?' + Math.random());
	sendRequest.method = URLRequestMethod.POST;
	var sendVars :URLVariables = new URLVariables();
	sendVars['id'] = id;
	sendVars['param'] = param;
	sendRequest.data = sendVars;
	sendLoader.load(sendRequest);
	var resulter:Boolean = false;
	sendLoader.addEventListener(Event.COMPLETE, function(e:Event)
	{
		if (sendLoader.data == "ok")
		{
			resulter = true;
		}
	});
	return resulter;
}
Но я так понимаю, она всегда возвращает false из предустановки. Как мне вернуть значение "наружу" изнутри события только после того, как оно произойдет?

Добавлено через 29 минут
Разобрался. Создал новый event и добавил слушателя на него.
__________________
Надо сменить подпись...

Старый 07.11.2015, 14:34
exsites вне форума Посмотреть профиль Отправить личное сообщение для exsites Найти все сообщения от exsites
  № 2  
Ответить с цитированием
exsites

Регистрация: Nov 2015
Сообщений: 46
наверное так:
Код AS1/AS2:
function senderData(id:Number, param:String, script:String):Boolean
{
	var sendLoader:URLLoader = new URLLoader();
	var sendRequest:URLRequest = new URLRequest('mydomen'+script+'.php' + '?' + Math.random());
	sendRequest.method = URLRequestMethod.POST;
	var sendVars :URLVariables = new URLVariables();
	sendVars['id'] = id;
	sendVars['param'] = param;
	sendRequest.data = sendVars;
	sendLoader.load(sendRequest);
	var resulter:Boolean = false;
	sendLoader.addEventListener(Event.COMPLETE, function(e:Event)
	{
		if (sendLoader.data == "ok")
		{
			resulter = true;
Poluchi();
		}
	});
	return resulter;
}
 
 
function Poluchi(){
trace(resulter);
}

Старый 07.11.2015, 14:41
EndoCrinologist вне форума Посмотреть профиль Отправить личное сообщение для EndoCrinologist Найти все сообщения от EndoCrinologist
  № 3  
Ответить с цитированием
EndoCrinologist
 
Аватар для EndoCrinologist

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
Он будет ругаться на эту строку, типа, "функция не возвращает значение". Уже пробовал
Код AS3:
sendLoader.addEventListener(Event.COMPLETE, function(e:Event)
dispatchEvent очень хорошо тут помог
__________________
Надо сменить подпись...

Старый 07.11.2015, 15:01
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 4  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
1)Нет решительно никакого смысла что-то возвращать из обработчика события, т.к. тому, кто его вызывает по барабану на то, что обработчик там возвращает.Точнее возврат значения имеет смысл только если функция-обработчик используется для чего-то еще помимо обработки события.
2)Использование анонимной функции в качестве обработчика и несохранение ссылки на нее(на функцию), делает невозможным потом отписаться от этого события и как следствие приводит к тому, что объект sendLoader не будет удален сборщиком мусора, что есть утечка памяти.

Старый 07.11.2015, 15:19
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
делает невозможным потом отписаться от этого события и как следствие приводит к тому, что объект sendLoader не будет удален сборщиком мусора, что есть утечка памяти.
А так?
Код AS3:
event.target.removeEventListener(event.type, arguments.callee);

Старый 07.11.2015, 16:00
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 6  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Можно конечно, но это извращение.А что если объект-диспетчер является частью пула и подразумевает повторное использование?

Старый 07.11.2015, 16:30
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А что если объект-диспетчер является частью пула и подразумевает повторное использование?
Ну а как это противоречит такой концепции? Отписались от слушателя, когда надо дернули диспетчер из пула, и снова подписались

Старый 07.11.2015, 16:44
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 8  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
а если событие, где происходит отписка, еще не наступило?

Старый 07.11.2015, 16:50
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от undefined Посмотреть сообщение
а если событие, где происходит отписка, еще не наступило?
Как оно может не наступить, если отписка происходит по событию в обработчике? Oo

Старый 07.11.2015, 18:05
EndoCrinologist вне форума Посмотреть профиль Отправить личное сообщение для EndoCrinologist Найти все сообщения от EndoCrinologist
  № 10  
Ответить с цитированием
EndoCrinologist
 
Аватар для EndoCrinologist

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
Суть в том, что настройка звука в приложении синхронизирована с сервером. При нажатии на кнопку на сервер отправляется запрос через выше указанную функцию. Мне нужно как-то обработать ответ. return'ы не помогали, поэтому, решил диспатчить события
__________________
Надо сменить подпись...

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.