![]() |
Как получить переменную внутри функции обработчика события?
Доброго времени суток.
Столкнулся с такой проблемой, мне нужно реализовать определенное количество контейнеров (количество контейнеров получаю с сервера), и к каждому контейнеру нужно прицепить свой Timer. Чтобы реализовать это я создаю массив Timer-ов и каждый Timer в функции обработчике должен знать свой индекс. Тут такая проблема как получить свой i в функции обработчике? в данном коде всегда возвращается 10 и это понятно, а как сделать чтобы возвращался свой i, то есть 1, 2, 3 и т.д? Код #1 Код AS3:
Код #2 Код AS3:
или вопрос можно поставить так: Как расширить экземпляр myTimer[i] и добавить в него например свойство id, чтобы выглядело так? Код #3 Код AS3:
Как расширить экземпляр myTimer[i] и добавить в него свойство id? |
Например так
Код AS3:
Код AS3:
|
Третий вариант вполне ничего или напишите класс TimerID унаследованный от Timer, и опишите в нем это свойство.
|
А зачем Вам вообще этот i? Сделате класс контейнера в котором композицией пропишите таймер. Диспатчите TimerEvent от имени контейнера. Подпишите контроллер на этот эвент. Делов-то!
|
Если вы добавили таймер в массив, то у него уже есть индекс - его положение в массиве. Но лучше для таких целей использовать Dictionary, т.как в массив один и тот же таймер можно добавить много раз, а в Dictionary - только 1. Не вижу большого смысла в создании дополнительных классов только ради одного свойства. Кроме того, я бы не стал создавать много таймеров - а один, и подисывался / отписывался от него, когда нужно.
|
Меня вообще не устраивает тот факт, что я должен ради этого создавать отдельный класс который будет расширяться от Timer, то есть (MyTimer extends Timer), можете дать пример где не надо создавать отдельный класс, а прямо в текущем коде (Код #3) можно расширить экземпляр экземпляр myTimer[i] и добавить в него свойство id?
Добавлено через 1 минуту Цитата:
|
>> а прямо в текущем коде (Код #3) можно расширить экземпляр экземпляр myTimer[i] и добавить в него свойство id?
Дык, говорю же, не нужно ничего расширять - вам нужен индекс из массива - Код AS3:
Код AS3:
|
Класс Timer не динамический, поэтому "расширять" экземпляры нельзя. Вообще "расширять экземпляры" и "не устраивает тот факт.." это с ног на головы, должно быть как раз наоборот.
|
Цитата:
|
Жизненных ситуаций очень много и я все же хотел был знать как расширять текущий экземпляр не создавая новый класс.
Например в таком коде: Код AS3:
вот еще раз повторю вопрос: Как в текущей ситуации экземпляру myTimer присвоить новое свойство id не создавая отдельный класс? |
А я еще раз повторю
Цитата:
|
Цитата:
|
wvxvw идею кинул с Dictionary
|
Цитата:
Как не создавая новых классов и не объявляя i в самом классе на подобие (private var i:Number), переменная i заданна строго в конструкторе, как обратиться к ней в функции обработчике? Код AS3:
|
Никак.
|
Цитата:
|
Цитата:
|
Цитата:
|
Это называется замыканием
http://ru.wikipedia.org/wiki/%D0%97%...D%D0%B8%D0%B5) Но as3 не умеет замыкать функции. |
Цитата:
Код AS3:
|
Цитата:
|
Это один в один пример из википедии - а чего вам хотелось бы? :)
кроме того, в АС так лучше не делать. |
Цитата:
А почему в АС так не нужно делать, где я упускаю? |
Цитата:
|
Цитата:
|
|
Цитата:
|
Smrad, просто она не нужна в АС3.
|
Цитата:
|
Цитата:
Добавлено через 6 минут Цитата:
|
Цитата:
|
Цитата:
|
Есть конструктивное предложение не холиварить. Про "нужна или не нужна" я пошутил.
Есть вещи, которые можно сделать тем или иным способом, и некоторые из этих способов я не использую, потому что их логика, с моей точки зрения, отличается от логики остального языка. То вышеупомянутые анонимные функции, интервалы и таймауты, а в AS2 были ещё и микс-ины, бродкастер и доступ к как бы приватным свойствам через []. Если разработчик понимает, что он делает, зачем, и как оно работает, это его личное дело (например, кажется, silin - большой любитель адских микс-инов в AS2), но вот давать такие примеры новичку, имхо, это бэд, очень бэд. Человек и так ещё не понимает, что такое область видимости, контекст, и т.д., а тут ему ещё и подсовывают нечто, требующее на два порядка более высокий уровень знаний. |
Сама задача весьма стрранно рещается.
зачем запускать 10 таймеров на 1 секунду. достаточно запустить 1 таймер, и в его обработчике сделать цикл. динамические классы, зло. |
Цитата:
|
Цитата:
|
Цитата:
Код AS3:
|
dimarik, тем болие тупо.
|
Не ожидал, что в два часа ночи проснешься =)
По существу. Согласен с пунктом про сигнатуру анонимной функции. Она отсутствует на этапе компиляции для компилятора. А виртуальная машина ведет себя на анонимных функциях довольно странно. Поясню. В примере Блуда анонимная функа не принимала ни одного аргумента, добавив в неё два или более аргументов, получаем runtime error "Invalid arguments count" |
Код AS3:
|
| Часовой пояс GMT +4, время: 19:15. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.