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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.11.2008, 02:43
fortman вне форума Посмотреть профиль Найти все сообщения от fortman
  № 1  
Ответить с цитированием
fortman
Banned

Регистрация: Jan 2007
Сообщений: 40
Attention sendAndLoad, как синхронизировать onData и return в классе?

Есть класс.
Код AS1/AS2:
class classes.Company{
 
	public var send_obj:LoadVars=null;
	public var rec_obj:LoadVars=null;
	public static var companyXML:XML = null;
 
	public function Company(){
		send_obj = new LoadVars();
		rec_obj = new LoadVars();
 
		rec_obj.onData=function(text:String) {
			companyXML = new XML(text);
		}
	}
 
	public function viewAll():XML{
		send_obj.select="select * from Company";
		send_obj.pass="";
		send_obj.sendAndLoad("xml.php", rec_obj, "GET");
		return companyXML;
	}
}
Есть другой класс, в котором создается объект этого и вызывается viewAll. Не удивительно, что в приведенном примере возвращается null. Но как сделать, что бы значение отправлялось методом viewAll после срабатывания onData? Чего я только не пробовал, и while, и setInterval, и watch... В прогерстве в стиле AS2 я новичок, всё бомбил AS1, возможно просто чего-то не знаю. Подскажите, как решить вышеописанную проблему?

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

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
надо onLoad вместо onData.
return тут не катит.
Вернуть ваш метод может true, к примеру - типа запрос отправлен ждите ответа.
А при сровабывании события onLoad нужно запускать функцию, которая будет обрабатывать ответ. Так как у вас, как я понял, несколько потомков класса, то callback функцию можно передавать как параметр метода viewAll

+
Цитата:
send_obj.select="select * from Company";
плохая идея!

Старый 17.11.2008, 03:18
fortman вне форума Посмотреть профиль Найти все сообщения от fortman
  № 3  
Ответить с цитированием
fortman
Banned

Регистрация: Jan 2007
Сообщений: 40
Почему надо onLoad и почему плохая идея с запросом не понял?

Класс, вызывающий viewAll
Код AS1/AS2:
class classes.ViewInfo{
	public var company:classes.Company = null;
	public var xml:XML = null;
 
	public function viewCompany(){
		company = new classes.Company();
		xml = company.viewAll();
 
	}
}
Как и что надо поправить тут?

Старый 17.11.2008, 05:31
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 4  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Примерно вот так, но код не тестировался, поэтому возможны глюки, но смысл уловить можно

Код AS1/AS2:
import mx.utils.Delegate;
 
class classes.ViewInfo
{
	public var company:classes.Company = null;
 
	public function ViewInfo():Void
	{
		company = new classes.Company();
		company.viewAll();
		company.onDataOK = Delegate.create(this, dataReady);
	}
 
	public function dataReady(companyXML:XML){
		trace("companyXML: " + companyXML);
	}
}
Код AS1/AS2:
import mx.utils.Delegate;
 
class classes.Company
{
	public var send_obj:LoadVars=null;
	public var rec_obj:LoadVars=null;
	public var companyXML:XML = null;
 
	public var onDataOK:Function;
 
	public function viewAll():Void
	{
		send_obj = new LoadVars();
		rec_obj = new LoadVars();
 
		send_obj.select="select * from Company";
		send_obj.pass="";
		rec_obj.onData = Delegate.create(this, onFinish);
		send_obj.sendAndLoad("xml.php", rec_obj, "GET");
	}
 
	public function onFinish(sData:String):Void
	{
		companyXML = new XML;
		companyXML.parseXML(sData);
		companyXML.ignoreWhite = true;
		onDataOK(companyXML);
	}
}
теперь если создать экземпляр класса ViewInfo (getXML:classes.ViewInfo = new classes.ViewInfo()), то в трейсе выведется полученный XML.

Еще одно решение - задействовать класс mx.events.EventDispatcher, с помощью которого класс classes.Company будет генерировать событие о получении данных, в классе classes.ViewInfo организовать подписку на это событие, мой пример работает по примерно похожей схеме, но немного проще
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 17.11.2008 в 06:45.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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