Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Обработчик click для новых объектов (http://www.flasher.ru/forum/showthread.php?t=131182)

_SoWa 14.10.2009 16:37

Обработчик click для новых объектов
 
Дело в том, что я создаю программно кнопки. Присваиваю им id & label, но как можно назначить им на обработчик клика какую-нибудь функцию?

Gubber 14.10.2009 16:53

При создании объекта можно вызвать вот такой код для кнопки
Код AS3:

button.addEventListener(MouseEvent.CLICK, clickFunction)

где button - это id кнопки
или для самой кнопки
Код AS3:

<mx:Button id="button" label="buttonLabel"  сlick="clickFunction(event)"  />


_SoWa 14.10.2009 17:29

Возникло затруднение
Первый вариант мне и нужен, ибо кнопочки создаются так:
Код AS3:

                import mx.controls.Button;
                public var b:Button = new Button();
 
                public function clickFunction(){
                        B1.label = "123";  //Вот тут дебагер флекса говорит 1120: Обращение несуществующего свойства B1.
                }
 
                public function CreateButton():void{
                b.id = "B1";
                b.label = "Click Me";
                b.addEventListener(MouseEvent.CLICK, clickFunction()); //Вот тут нужно вызывать метод addEventListener к b или B1 ?
                addChild(b);
                }
...
<mx:Button x="341" y="142" id="button1" label="CreateButton" click="CreateButton();"/>

Ошибка, выдаваемая приложением:
Цитата:

TypeError: Error #2007: Параметр listener не должен быть равен нулю.
at flash.events::EventDispatcher/addEventListener()
at ContactManager/CreateButton()[C:\Users\SoWa\Documents\Flex Builder 3\ContactManager\src\ContactManager.mxml:20]
at ContactManager/__button1_click()[C:\Users\SoWa\Documents\Flex Builder 3\ContactManager\src\ContactManager.mxml:48]


Волгоградец 14.10.2009 17:36

Странно, вообще-то clickFunction обязательно должен быть описан с аргументом event типа MouseEvent.
Листенера добавлять к b.
В clickFunction обращаться event.currentTarget.label = "123";

_SoWa 14.10.2009 17:44

Спасибо! Код начинает получаться похожим на правду...
Код AS3:

                import mx.controls.Button;
                public var b:Button = new Button();
 
                public function clickFunction(event:MouseEvent){
                        event.currentTarget.label = "123";
                }
 
 
 
                public function CreateButton():void{
                b.id = "B1";
                b.label = "Click Me";
                b.addEventListener(MouseEvent.CLICK, clickFunction(/*Тут как прописать аргумент? event или MouseEvent флекс не разрешает*/));
                addChild(b);
                }


Волгоградец 14.10.2009 17:50

Тут без аргумента
Код AS3:

b.addEventListener(MouseEvent.CLICK, clickFunction);


_SoWa 14.10.2009 18:05

Работает! Спасибо большое!
И уже последний теоретический вопрос: для хранения индивидуальной информации о созданом объекте разумно ли использовать setStyle & getStyle?
Например, каждой кнопочке я буду присваивать такой "невидимый параметр", например "action" и в него писать нужную мне инфу, а из функции-обработчика эту инфу доставать?
Это работает, я попробовал, но с точки зрения оптимальности это как будет?

yorlin 15.10.2009 10:50

А зачем вам id для кнопки созданной при помощи AS? Ее название по смыслу и есть id.

_SoWa 15.10.2009 11:40

А, правда, туплю ))


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

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