Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   addEventListener в for записывается только в последний объект массива (http://www.flasher.ru/forum/showthread.php?t=176655)

zoomerland 15.03.2012 03:45

addEventListener в for записывается только в последний объект массива
 
Учу AS3, пишу плеер для вконтакта. Есть массив из кнопок с именами-значениями ИД пользователя, список песен которого нужно получить. Делаю цикл for, в котором обхожу все элементы, вешая на них addEventListener.
В функции слушателе я получаю ИД через e.target.name, и делаю запрос к апи контакта audio.get, с нужным мне именем.
В оффлайн тесте - все прекрасно работает, но вот из самого контакта как кнопка работает только последняя в массиве.
Всю голову сломал. Пробовал разные варианты вешания события на кнопку и из самого класса-контейнера с кнопками, и из главного класса приложения - эффект один. Причем e.target.name всегда передает ИД пользователя.

СлаваRa 15.03.2012 09:36

код в студию

zoomerland 15.03.2012 14:11

Код AS3:

                public function drawKnopki(dataFr:Object):void {
                        for (var key:uint = 0; key < dataFr.length; key++) {
                                var friend:Object = dataFr[key];
                                friendsButtons.push(new FriendsPlusFoldersContainer.FriendButSimpleBut(friend));
                                friendsButtons[key].name = friend['uid'];
                                addChild(friendsButtons[key]);
                                friendsButtons[key].y = 100 * key + 5;
                        }
                }

Этот код рисует кнопки в классе контейнере для кнопок.
dataFr - полный ответ на friends.get от контакта.
FriendButSimpleBut - это SimpleButton, расширенный спрайтами кнопок и цветами.


В главном классе, когда приходит ответ от контакта(dataFr) выполняется следующая функция

Код AS3:

public function onFriendsLoad(dataFr:Object):void {
                friendsContainer = new FriendsPlusFoldersContainer.FriendsPlusFoldersContainer(dataFr);
                friendsContainer.x = 380;
                friendsContainer.y = playka.y + playka.height + 5;
                for (var key:uint = 0; key < dataFr.length; key++) {
                        var temp:String = dataFr[key]['uid'];
                        friendsContainer.friendsButtons[key].addEventListener(MouseEvent.CLICK, playListClickListener);
                }
                addChild(friendsContainer);
        }

FriendsPlusFoldersContainer - контейнер для кнопок
playka другой контейнер, не имеющий в данном случае отношения к делу


Код AS3:

        public function playListClickListener(e:MouseEvent):void {
                var tempTf:TextField = new TextField();
                tempTf.text = (e.target.name);
                tempTf.x=250;
                playka.addChild(tempTf);
                trace("Вы нажали " + e.target.name);
                VK.api('audio.get', { uid: e.target.name }, audioListLoadComplite, onError);
                e.updateAfterEvent();
        }

tempTF - временная меря для проверки работоспособности без output.
audioListLoadComplite - фунция, выполняющая рисование самих песен кнопок на основе ИД пользователя.

Если нужно - могу и весь код скинуть. Так же просьба не судить строго, но на ошибки указывать, учусь как никак)

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


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

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