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

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

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

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Arrow Как передать параметр в общую функцию события

Есть код:
Код:
		function loadLibrary(name,path) {
		   var url:URLRequest = new URLRequest(path);
                   //КАК ЗДЕСЬ ПЕРЕДАТЬ ПАРАМЕТР NAME в функцию onLibraryLoaded
 		   var l:Loader = new Loader();
  		   l.contentLoaderInfo.addEventListener(Event.COMPLETE, onLibraryLoaded);
  		   l.load(url);
		}
		private function onLibraryLoaded(e:Event){ //загрука карты прошла успешно
			//КАК ЗДЕСЬ ПОЛУЧИТЬ ПАРАМЕТР NAME???
		}
Собственно вопрос в коде

Старый 01.02.2008, 04:50
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Вы знаете, что такое поля класса? Если в один момент времени может грузится только одна либа, то используйте поле класса для хранения данных. Если нет, то напишите наследника Loader с необходимыми полями и грузите через него. Соответственно, при получении события, можно сослаться на target и получить необходимые данные. Либо написать делегата:

Код:
function resizeHandler(event:Event, ...rest):void {
	trace(event, rest);
}
var delegate:Function = function(scope:Object, func:Function, ...rest):Function {
	return function(...args):void {
		func.apply(scope, args.concat(rest));
	}
}
super.stage.addEventListener(Event.RESIZE, delegate(this, this.resizeHandler, 1, 2, 3));
Хотя этот вариант не очень хорош.


Последний раз редактировалось etc; 01.02.2008 в 05:02.
Старый 01.02.2008, 19:01
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 3  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Delegate работает как надо.

2 _etc огромное спасибо.

Старый 27.02.2008, 08:09
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 4  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Мне тоже Delegate очень помог.

>Хотя этот вариант не очень хорош.
А в чем его недостатки?

Старый 27.02.2008, 12:31
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
В том, что отписаться от такого обработчика сложно. Это как минимум.

Старый 27.02.2008, 13:08
Snut вне форума Посмотреть профиль Отправить личное сообщение для Snut Посетить домашнюю страницу Snut Найти все сообщения от Snut
  № 6  
Ответить с цитированием
Snut
 
Аватар для Snut

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
ну например можно написать класс типа
Код:
//ChangeDateEvent.as

package Loaders.ModulesLoader
{
	import flash.events.Event;

	public class ChangeDateEvent extends Event
	{
		public static const DATE:String="DATE";
		private var _dateValue:Date;
		
		public function ChangeDateEvent(type:String, date:Date)
		{
			this.dateValue = date;
			super(type);
		}
		public function set dateValue(value:Date):void
		{
			_dateValue = value;
		}
		public function get dateValue():Date
		{
			return _dateValue;
		}
	}
}
так у меня модули общались между собой не зная друг о друге
__________________
Работаю

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

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
расширять класс Event своим классом и передавать всё что нужно
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 28.02.2008, 08:14
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 8  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Я тоже раньше думал что кастомные события покрывают весь спектор возможных случаев, пока не столкнулся с необходимостью передавать параметр.

Старый 28.02.2008, 09:53
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от terbooter
Я тоже раньше думал что кастомные события покрывают весь спектор возможных случаев, пока не столкнулся с необходимостью передавать параметр.
В чем проблема передать параметр вместе с событием?
У меня никогда не возникало ситуации, когда нужен подобный делегат.

Snut, геттер и сеттер в событии не нужен, нужна обычная публичная переменная (кроме случаев, когда нужно сделать возможность указания значения только в конструкторе, тогда пишется только геттер). А ещё надо описывать метод clone(), иначе при всплытии события придёт не то событие, которое ожидаешь.


Последний раз редактировалось etc; 28.02.2008 в 10:03.
Старый 28.02.2008, 11:09
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 10  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
Код:
package {
        import flash.events.Event;
	public class MyEvent extends Event {
		public static var COOL_EVENT:String = "COOL_EVENT";
		
		public var param:*;
		
		public function MyEvent(type:String, param:*) {
			this.param = param;
			
			super(type);
		}
	}
	
}
.......
//кастомный евент для dispatchera
dispatchEvent(new MyEvent(MyEvent.COOL_EVENT, myParam));
можно ещё так:
Код:
l.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event){
      onLibraryLoaded(name);
});

private function onLibraryLoaded(name:*){ //загрука карты прошла успешно
	trace(name);
}
__________________
Flash Developer
Папа TDP4 Team Battle


Последний раз редактировалось CrazyFlasher; 28.02.2008 в 13:28.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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