Форум 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=124490)

imdogma 30.04.2009 23:50

Работа кнопки в цикле
 
Есть цикл, который выстраивает список треков в плеере из массива, который получает из mysql. Все работает как надо. Нужно реализовать, чтобы при нажатии на элемент этого списка запускался нужный файл (его имя также подгружается из базы). Проблема собственно с реализацией этого самого нажатия в этом цикле в АС3. В АС2 мой код выглядил так:
Код AS1/AS2:

for(var i:uint = 0; i<_result.length;i++) {
var _id:Number = _result[i][0];
item._id = _id;
item.OnRelease = function() {
 
s.play (this.lfile);
 
}
}

В АС3 пытался сделать так:
Код AS3:

for(var i:uint = 0; i<_result.length;i++) {
 
var _id:Number = _result[i][0];
newTrackItem.addEventListener(MouseEvent.CLICK, playItem);
 
newTrackItem._id = _id;
 
function playItem(e:MouseEvent):void {
 
trace(newTrackItem._id);
 
}               
}

Но трейсится только ИД последней записи в списке. При клике на любую кнопку.
Прошу прощения за глупые вопросы, но с АС3 пока что тока разбираюсь

Fatality 01.05.2009 00:14

Ваш код — бред какой-то.
Код AS3:

for(var i:uint = 0; i<_result.length;i++) {
 var _id:Number = _result[i][0];
 newTrackItem.addEventListener(MouseEvent.CLICK, playItem);
 newTrackItem._id = _id;       
}
function playItem(e:MouseEvent):void {
 trace(newTrackItem._id);
}

У _id, всегда будет последнее значение, ведь вы не меняете newTrackItem в цикле.

iNils 01.05.2009 00:19

Код AS3:

for(var i:uint = 0; i<_result.length;i++) {
        var _id:Number = _result[i][0];
        // формирует newTrackItem, о чем сказал Fatality
        newTrackItem.addEventListener(MouseEvent.CLICK, playItem);
        newTrackItem._id = _id;
}
function playItem (e:MouseEvent):void {
        trace (e.target.x);
}


Fatality 01.05.2009 00:25

Обработчик один, а слушателей много.
Код AS3:

function playItem(e:MouseEvent):void {
 trace(e.target._id);
}


imdogma 01.05.2009 00:30

Странно, в трейсе - undefined пишет :(

Добавлено через 50 секунд
Вот весь код цикла, мб так понятнее будет
Код AS3:

for(var i:uint = 0; i<_result.length;i++) {
 
                                var newTrackItem:MovieClip = new trackItem();
 
                                newTrackList.addChild(newTrackItem);
                                newTrackItem.x = i*22+60
                                newTrackItem.y = -10;
                                newTrackItem.buttonMode = true;
                                var _id:Number = _result[i][0];
                                var _trackAuthor:String = _result[i][1];
                                var _trackName:String = _result[i][2];
                                var _trackFilename:String = _result[i][3];
 
                                newTrackItem.id.text = _id;
                                newTrackItem._id = _id;
                                newTrackItem.addEventListener(MouseEvent.CLICK, playItem);
 
                                function playItem (e:MouseEvent):void {
                                trace (e.target._id);
                                }
 
 
 
                                }


Fatality 01.05.2009 00:34

Вам же два раза написали, я и iNils, а вы опять за свое. Ну зачем обработчик в цикл пихать ?

imdogma 01.05.2009 00:39

Хммм извеняюсь, невнимательно прочел ваши примеры. Только вот от вынесения обработчика из цикла мало что изменилось. все равно - undefined

Добавлено через 26 минут
Урааа! помог не
Код AS3:

e.target

а
Код AS3:

e.currentTarget

Спасибо за наводку, ребят!

Fatality 01.05.2009 01:08

В коде что вы выложили - все норм. Попробуйте
Код AS3:

for(var i:uint = 0; i<_result.length;i++) {
        var newTrackItem:MovieClip = new trackItem();
        newTrackList.addChild(newTrackItem);
        newTrackItem.x = i*22+60
        newTrackItem.y = -10;
        newTrackItem.buttonMode = true;
        var _id:Number = _result[i][0];
        var _trackAuthor:String = _result[i][1];
        var _trackName:String = _result[i][2];
        var _trackFilename:String = _result[i][3];
        newTrackItem.id.text = _id;
        newTrackItem._id = _id;
          trace(newTrackItem._id); //что выводит этот трэйс ?
        newTrackItem.addEventListener(MouseEvent.CLICK, playItem);
}


imdogma 01.05.2009 01:12

Этот трейс выводит все ID, что есть в нужной мне таблице в базе. С ним все норм. Проблема была именно в e.target._id. Нужно было использовать e.currentTarget._id и все стало хорошо :)


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

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