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

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

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Question Почему не диспатчится ивент?

Код AS3:
public function addObject(clan:int, key:String, name:String, x:int, y:int, desc:String, onResult:Function = null):void
{
	if (onResult != null)
		addObjectResult = onResult;
	if (addObjectResult != null)	
		if (!service.getOperation('addObject').hasEventListener(ResultEvent.RESULT))
			service.getOperation('addObject').addEventListener(ResultEvent.RESULT, addObjectResult);
	service.getOperation('addObject').send(clan, key, name, x, y, desc);
}
Это кусок кода из модуля (<s:Module/>), содержащего <s:RemoteObject/> (id="service") и помещенного в отдельный проект библиотеки.
В нем так же присутствует публичная переменная addObjectResult. Этот кусок кода замечательно работает при первом вызове. Я передаю onResult, и этот метод благополучно вызывается по событию. Но при последующих вызовах этого не происходит. Условие if (!service.getOperation('addObject').hasEventListener(ResultEvent.RESULT)) выполняется, и, я полагаю, прослушивателем является функция, переданная в качестве параметра при предыдущем вызове (т.е. та же самая). Но, еще раз повторюсь, вызова ее не происходит. Вопрос?

Старый 21.08.2011, 01:11
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 2  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
подпишите на получение результа service, для проверки

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Неа, тишина. Запрос проходит (данные в базе обновляются), а ответа нет.
ПС: еще стати вопрос не по теме (проше не заострять на него внимание). Каждый раз перед дебагом приходится делать клин библиотэки, это нормально?

Добавлено через 10 минут

Код:
[RPC Fault faultString="error" faultCode="Channel.Call.Failed" faultDetail="NetConnection.Call.Failed: HTTP: Status 500"]
Вот какой зверь выскакивает, хотя повторюсь, удаленный метод выполняется.


Последний раз редактировалось Silicium; 21.08.2011 в 02:32.
Старый 21.08.2011, 03:05
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 4  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
кстати документация говорит что каждый раз создается новый AbstractOperation
http://help.adobe.com/ru_RU/FlashPla...peration%28%29
может лучше один раз вызвать getOperation() ? от греха подальше

Добавлено через 5 минут
мне хорошо помог переход на HTTPService (XML), одно время
тоже какие то глючки постоянно сыпались с RemoteObject


Последний раз редактировалось ShockWave512; 21.08.2011 в 03:11.
Старый 21.08.2011, 04:43
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Не стоит проверять одну операцию, подписываться у второй и вызывать send у третьей.
Код AS3:
public function addObject(clan:int, key:String, name:String, x:int, y:int, desc:String, onResult:Function = null):void
{
	if (onResult != null)
	{
		var operation:AbstractOperation = service.getOperation('addObject');
		operation.addEventListener(ResultEvent.RESULT, addObjectResult);
		operation.send(clan, key, name, x, y, desc);
	}
}
Заодно почитайте о AsyncToken и IResponder.
__________________
משיח לא בא
משיח גם לא מטלפן

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Всем спасибо большое.
Цитата:
кстати документация говорит что каждый раз создается новый AbstractOperation
В документации сказанно
Цитата:
. Если операция не была создана заранее, в течение этого вызова создается новая операция
Так что читая ее (что я собственно и делал) не мог и подумать, что выйдет какая-то белеберда.
Однако и Ваш, alatar, способ не поможет, так-как .getOperation будет все ровно вызываться каждый раз при вызове addObject.
На последок скажу, что помагать-то уже и не зачем! Сегодня запустил - все работает без косяков :-/
*слов нет*
Всем спасибо за участие, вопрос приподзакрыт.

Старый 21.08.2011, 16:23
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 7  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
Цитата:
Сообщение от Silicium Посмотреть сообщение
Однако и Ваш, alatar, способ не поможет, так-как .getOperation будет все ровно вызываться каждый раз при вызове addObject.
статические элементы никто не отменял (да и без них легко обойтись )

Код AS3:
private static var operation:AbstractOperation = null
 
private function addObject():void
{
     if ( operation != null )
      {
            operation.addObject();
      }
       else
      {
            operation = getOperation("name");
       }
}

Старый 21.08.2011, 17:25
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 8  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Ночь была, тупил сильно. Не работал код, когда я менял прослушиватель. В переменную модуля записывалась новая ссылка на метод, а т-к у операции прослушиватель уже был, то он не заменялся. Все исправил заменой тела функции на вот это:
Код AS3:
var operation:AbstractOperation = service.getOperation('addObject');
if (onResult != null)
{
	if (addObjectResult != null)
		operation.removeEventListener(ResultEvent.RESULT, addObjectResult);
	addObjectResult = onResult;
	operation.addEventListener(ResultEvent.RESULT, addObjectResult);
}
operation.send(clan, key, params);

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

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

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


 


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


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