Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обработчики циклом. (http://www.flasher.ru/forum/showthread.php?t=209153)

stepa323 15.10.2014 22:51

Обработчики циклом.
 
Здравствуйте как запустить много обработчиков на кнопки циклом? Есть магазин нужно обрабатывать кнопки делал так, но естественно не получилось, т к значение i меняется и естественно берется последнее значение.

Код AS3:

 
while(i<=10){
bt_head[i].addEventListener(MouseEvent.CLICK, function(){buyItem(head[i]);});
i++;
}


Gerbert 15.10.2014 23:01

Можно подробнее?

stepa323 15.10.2014 23:10

Цитата:

Сообщение от Gerbert (Сообщение 1173522)
Можно подробнее?

Да делаю магазин, есть кнопки по нажатию на которые должно покупаться, вот хотелось бы обработать их разом как-то, а не для каждого отдельно создать обработчик.

Gerbert 15.10.2014 23:15

А как у Вас логика построена? Много окон с картинкой, ценой и рядом кнопкой "в корзину"?

stepa323 15.10.2014 23:18

Да , вот скриншот ссылка

Gerbert 15.10.2014 23:39

Я бы вот как сделал... Создал контейнер миниокошка и для каждого описал бы json.
Потом бы при создании контейнера кидал бы в конструктор этот данные из этого json
где они бы и сохранялись в свойство? что-то типа
Код AS3:

private var _data:Object;
 
private var _textFieldOne:TextField = new TextField( );
private var _textFieldTwo:TextField = new TextField( );
 
private var _button:Button = new Button( );
 
public function Constructor( )
{
        super.addChild( _textFieldOne );
        super.addChild( _textFieldTwo );
 
        _button.addEventListener( MouseEvent.CLICK, button_clickHandler );
        super.addChild( _button );
}
 
public function setData( data:Object ):void
{
        _data = data;
        this.install( _data );
}
private function install( data:Object ):void
{
        super.addChild( data.img );
        _textFieldOne.text = data.textOne;
        _textFieldTwo.text = data.textTwo;
}
 
private function button_clickHandler( event:MouseEvent ):void
{
        super.dispatchEvent( new CustomEvent( _data ) );
}

Потом создаете таких контайнеров сколько Вам нужно и помещаете в контайнер-страницу и его же
подписываете на событие CustomEvent где изымаете data и складываете в массив корзина.
И если покупатель потом зайдет и захочет посмотреть сколько у него товаров и какие, то добавляете
эту data из массива и показываете ему.

Добавлено через 3 минуты
Забыл самое главное - события должны быть "всплывающими"!

stepa323 15.10.2014 23:50

Спасибо, но это наверное пока сложновато для моего понимания, я с as 2 только перешел, еще не очень разбираюсь что да как. Есть ли способ именно по клипам обработчиков пустить разом много.

Gerbert 16.10.2014 00:03

Код AS3:

var i:int = buttons.length;
while( i-- > 0 ){
        buttons[i].addEventListener( MouseEvent.CLICK, buttons_clickHandler );
}
 
private function buttons_clickHandler( event:MouseEvent ):void
{
        trace( event.target ); // будет кнопка
}

Так?

Добавлено через 1 минуту
Просто не совсем Вас понимаю..

samana 16.10.2014 00:15

Да, находите тот объект, который вызвал событие (как подсказал Gerbert) и вычисляйте его индекс в массиве:
Код AS3:

var i:int = bt_head.length;
while( i-- > 0 )
{
        bt_head[i].addEventListener( MouseEvent.CLICK, buttons_clickHandler );
}
 
private function buttons_clickHandler( event:MouseEvent ):void
{
        buyItem( head[bt_head.indexOf(e.currentTarget)] );
}


stepa323 16.10.2014 00:24

Так этот код сделает обработчики с buttons[0] n к концу выполнения цикла i будет равна нулю, то и все buttons будут с указателем i=0 же?
Код AS3:

var i:int = buttons.length;
while( i-- > 0 ){
        buttons[i].addEventListener( MouseEvent.CLICK, buttons_clickHandler );
}

но спасибо, попробую по вашим примерам сделать. Надеюсь сработает


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

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