![]() |
Обработчики циклом.
Здравствуйте как запустить много обработчиков на кнопки циклом? Есть магазин нужно обрабатывать кнопки делал так, но естественно не получилось, т к значение i меняется и естественно берется последнее значение.
Код AS3:
|
Можно подробнее?
|
Цитата:
|
А как у Вас логика построена? Много окон с картинкой, ценой и рядом кнопкой "в корзину"?
|
Да , вот скриншот ссылка
|
Я бы вот как сделал... Создал контейнер миниокошка и для каждого описал бы json.
Потом бы при создании контейнера кидал бы в конструктор этот данные из этого json где они бы и сохранялись в свойство? что-то типа Код AS3:
подписываете на событие CustomEvent где изымаете data и складываете в массив корзина. И если покупатель потом зайдет и захочет посмотреть сколько у него товаров и какие, то добавляете эту data из массива и показываете ему. Добавлено через 3 минуты Забыл самое главное - события должны быть "всплывающими"! |
Спасибо, но это наверное пока сложновато для моего понимания, я с as 2 только перешел, еще не очень разбираюсь что да как. Есть ли способ именно по клипам обработчиков пустить разом много.
|
Код AS3:
Добавлено через 1 минуту Просто не совсем Вас понимаю.. |
Да, находите тот объект, который вызвал событие (как подсказал Gerbert) и вычисляйте его индекс в массиве:
Код AS3:
|
Так этот код сделает обработчики с buttons[0] n к концу выполнения цикла i будет равна нулю, то и все buttons будут с указателем i=0 же?
Код AS3:
|
Вы даже не знаете как цикл работает?
|
Тогда сделайте через цикл for, чтобы ничего не отвлекало.
|
Код AS3:
|
Эмм, народ, stepa232 на самом деле столкнулся с кривой реализацией примитивов и областей видимости в Flash Player. Давайте я поясню проблему кода из первого поста, смотрите:
Код AS3:
Код AS3:
Сейчас читайте внимательно. На каждой итерации цикла мы делаем следующее 1) берем переменную i 2) берем у переменной i ее текущее значение 3) берем массив bt_head 4) запрашиваем у массива элемент с номером, равным значению i Зачем я так подробно все это расписываю? Затем что следующее использование аналогичной конструкции работает совсем по-другому. Смотрим: Код AS3:
А все просто. Потому что функция не выполняется внутри цикла, она создается внутри цикла. А выполняется она всегда строго после того, как цикл закончился. А когда цикл закончился, i имеет значение с последней итерации (что логично). Разбираем по пунктам, что делается на каждой итерации цикла: 1) Создаем новую безымянную функцию 2) Создаем код новой функции - взять переменную i - взять у i ее текущее значение - взять массив head - ну и дальше все как в прошлый раз 3) Нашу свежую функцию передаем в метод addEventListener в качестве аргумента. Видите? Вся проблема в словах текущее значение. В ActionScript переменная i почему-то не просто число, а объект, контейнер, у которого можно спросить его значение. И это большая проблема в таких вот замыканиях. Но есть и решение. Оно некрасивое и неудобное в общем-то. Но оно есть. Нужно создать для каждой функции свой собственный контейнер для числа. Очень грубо это будет выглядеть вот так: Код AS3:
|
Gerbert, честно говоря Вы немного поднадоели. Человек не имеет права не знать как работает цикл?
А если он не знает, то он удостоен Вашего содержательного ответа? Идите пишите игры, программы, иначе у Вас будет социопатия. |
Цитата:
P.S. Ссылка неактивна, я не знаю, как у вас там все построено |
Цитата:
|
Цитата:
Я ни в коем случае не пытаюсь "поставить Вас на место", просто хочу показать эту ситуацию со стороны. |
samana, я понимаю, что со стороны это может выглядеть,
как грубость или неадекватность.. Но дело в том, что я не вкладываю в слова отрицательных эмоций, когда пишу их. Можно было написать -"нет" и это было бы равнозначно, но почему-то я написал так. Возможно меня задело то, что показав человеку код, он ещё спрашивает - "а работает ли он", вместо того, чтобы попробовать. В общем, я больше так не буду :) |
Код AS3:
Цитата:
другое дело место хранения переменной |
Я о том и написал, что i должна быть примитивом, но почему-то им не является. Такие же проблемы есть в .NET (C#), только недавно пофиксили. А указателей у нас в AS3 нету, не знаю о чем вы. Равно ка и не очень понял про место хранения переменной - вы о чем?
|
то шо переменная - объект это конечно тот еще бред, но в любом случае механизм замыканий работает правильно и это поведение описано в спецификации
Цитата:
Цитата:
|
Если что-то описано в документации, это вовсе не означает, что это что-то правильно. В моем понимании примитивные типы должны передаваться по значению, или хотя бы успешно имитировать подобное поведение. У Adobe свой взгляд, но подобная реализация приводит к неочевидным последствиям. Неочевидность - это, пожалуй, худшее что может случиться с API.
|
gloomyBrain,
тут все нормально и обычно: Код AS3:
Код AS3:
Цитата:
Код:
int a = 1; |
nubideus, про C# я вот об этом.
Про AS3: я нахожу Ваши примеры идентичными. Я в своем посте описал, как в Flash Player один и тот же тип данных может передаваться как по ссылке, так и по значению, что само по себе удивительно и неочевидно. Надеюсь, на этот раз Вы поймете мою позицию по этому вопросу. |
короче, написал криво, но примерно как то так оно работает
Код AS3:
|
| Часовой пояс GMT +4, время: 15:41. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.