Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Обращение к компоненту по текстовому id (http://www.flasher.ru/forum/showthread.php?t=135291)

spacecadet 20.01.2010 12:18

Обращение к компоненту по текстовому id
 
Здравствуйте, всем!

И опять вопрос от начинающего "программиста" (в форуме поискал, но ответа так и не нашел). Предположим, есть у меня множество компонентов, например типа Label, которые я создаю динамически. При создании, им присвоены id-шники "lbl_1","lbl_2",...,"lbl_N". Как мне обратится к такому компоненту имя лишь текстовую строку, содержащую его id? (В Borland'овской реализации C++ и Delphi например есть функция FindComponent(name:string), которая возвращает ссылку на компонент с именем name, нужна такая же для Flex)

BeDLiNt 20.01.2010 12:36

Можно, но криво и косо:
Код AS3:

for (var i:Number = 0; i < 10; i++)
{
        var label:Label = new Label();
        label.id = "lbl_" + i;
        label.text = "text" + i;
        label.y = i*20;
        this.addChild(label);
}
 
for each (var child:UIComponent in this.getChildren())
{
        if (child.id == "lbl_1")
                (child as Label).text = "New Label Text";
}

Куда правильнее хранить не id-шники ваших компонентов, а сразу ссылки на них. Тогда и искать ничего не прийдется.

spacecadet 20.01.2010 14:40

А не подскажите как это сделать? :rolleyes:

BeDLiNt 20.01.2010 15:04

Допустим, создать такой массив с ссылками на эти объекты:
Код AS3:

var labelsArray:Array = [];
 
...
 
for (var i:Number = 0; i < 10; i++)
{
        var label:Label = new Label();
        label.text = "text" + i;
        label.y = i*20;
        this.addChild(label);
        labelsArray.push(label);
}
 
(labelsArray[1] as Label).text = "New Label Text";

Всё зависит от того как в дальнейшем Вам будет удобнее работать с этими компонентами.

spacecadet 20.01.2010 15:19

Восхитительно, спасибо Вам, BeDLiNt! Который раз мне уже помогаете!!! :) :) :) :yahoo:

BeDLiNt 20.01.2010 15:25

spacecadet: Пожалуйста)


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

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