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

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

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

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
По умолчанию addEventLIstener + Delegate

Не знаю с чего начать

вообщем, есть мувик к которому подключён класс. В классе есть вещатель передающий переменные

Код:
dispatchEvent ({type:'onOpen', data:params})
Есть класс котрый слушет мувик:

Код:
addEventListener ("onOpen", ...)
вместо многоточия должен быть либо Delegate или название функции
1. Если название функции: параметр передаётся првильно

Код:
addEventListener ("onOpen", opener)

private function opener (obj:Object):Void {
    trace (obj.data) // с этим всё ок
    trace (this) // выводит ссылку на объект диспетчер
}
В этом случае как вы поняли у меня область видимости не та что нужна.

Теперь вариант 2:

Таже конструкция, только используется Delegate:

Код:
addEventListener ("onOpen", Delegate.create (this, this.opener)

private function opener (obj:Object):Void {
    trace (this) //this естественно то что нужно
    trace (obj.data) // data диспетчера не видна
}

Собственно вопрос и заключатся в том, как передать data и в тоже время изменить видимость.
__________________
Free-lance | Twitter | Me

Старый 13.05.2007, 20:46
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
http://www.flasher.ru/forum/showpost...3&postcount=10
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 13.05.2007, 20:50
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 3  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Я твоим Delegate тоже пытался пользоватся, только вот как в твоём Delegate в последнем параметре получить переменную вещателя до меня не доходит.

Код:
import ru.inils.util.Delegate;

addEventListener ("onOpen", Delegate.create (this, Delegate.create (this, this.opener, [...?]))

private function opener (obj:Array):Void {
    trace (this) //this естественно то что нужно
    trace (obj) // data диспетчера не видна
}
__________________
Free-lance | Twitter | Me


Последний раз редактировалось screamge; 13.05.2007 в 20:54.
Старый 13.05.2007, 21:09
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 4  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
У меня оба случая рабочие...

Старый 13.05.2007, 21:13
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 5  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Цитата:
Сообщение от lowka
У меня оба случая рабочие...
Я не знаю как у вас это работает, но у меня теряется то одно то другое. А так да, оба примера рабочие.
__________________
Free-lance | Twitter | Me

Старый 13.05.2007, 21:28
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 6  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Кнопка:
Код:
import mx.events.EventDispatcher;
import mx.utils.Delegate;

class TestButton extends MovieClip {
	
	public var addEventListener:Function;
	public var removeEventListener:Function;
	
	private var dispatchEvent:Function;
	
	private var _data:Object;
	
	private function TestButton(){
		super();
		
		EventDispatcher.initialize(this);
		
		this._data = {id: 0, label: "Hello"};
	}

	private function onPress():Void {
		this.dispatchEvent({type: "onClick", data: this._data});
	}
}
Тест:
Код:
import TestButton;
import mx.utils.Delegate;

class MyTest extends MovieClip {
	
	private var _button:TestButton;
	
	private function MyTest() {
		super();
		this.onEnterFrame = this.run;
	}
	
	private function run():Void {
		delete this.onEnterFrame;
		
		this._button = TestButton(this.attachMovie("TestButton", "_bt", 0));
		this._button.addEventListener("onClick", Delegate.create(this, this.clickHandler));
		this._button.addEventListener("onClick", this);
	}
	
	private function clickHandler(event:Object):Void{
		trace("clickHandler:");
		trace(event["data"]["label"]);
	}
	
	private function onClick(event:Object):Void{
		trace("onClick:");
		trace(event["data"]["label"]);
	}
}
Мой трейс:
Код:
onClick:
Hello
clickHandler:
Hello

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

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Большое спасибо. А вообще странно, у меня конструкция похожа, разница в том что слушается клип:

Код:
import mx.events.EventDispatcher;
import mx.utils.Delegate;

class TestButton extends MovieClip {
	
	public var addEventListener:Function;
	private var dispatchEvent:Function;
	
	public function TestButton(){
		EventDispatcher.initialize(this);
	}

	private function onPress():Void {
		var param:String = "SomeText"
		this.dispatchEvent({type: "onClick", data:param});
	}
}
Код:
import mx.utils.Delegate;

class MyTest extends MovieClip {
	
	private function MyTest() {
		_root.but_mc.addEventListener("onClick", Delegate.create(this, this.clickHandler));
		_root.but_mc.addEventListener("onClick", this);
	}
	
	private function clickHandler(event:Object):Void{
		trace("clickHandler:");
		trace(event.data);
	}
	
	private function onClick(event:Object):Void{
		trace("onClick:");
		trace(event.data);
	}
}
В таком обрезанном варианте всё работает, а в полном что-то не очень хочет, видимо у меня ошибка в другом месте.

Ещё раз спасибо.
__________________
Free-lance | Twitter | Me

Старый 14.05.2007, 00:27
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 8  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Чудеса случаются, после 2-х часовой безполезной прогулки по классу состоящего из 2000 строк закрыл флеш, после открытие всё заработало. Уродство! Поймал бы я того кто придумал ASO файлы
__________________
Free-lance | Twitter | Me

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

Регистрация: Sep 2002
Сообщений: 30,784
Класс из 2000 строк? Чума… у меня таких не было никогда

Старый 16.05.2007, 02:44
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 10  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Ну это ты видимо проектировать проекты умеешь, а у меня как-то...
Сейчас делю на отдельные куски и всё понаписанное переношу в отдельные классы. Никогда не делайте так как сделал я, __etc прав - чума!
__________________
Free-lance | Twitter | Me


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

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

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


 


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


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