эквивалент getElementById в Actionscript? - PullRequest
12 голосов
/ 10 августа 2009

Я хочу получить динамический доступ к группе объектов в моем mxml. Я могу построить их имя / идентификатор. В Javascript я могу сделать getElementById(ID), чтобы получить объект. Как я могу сделать это в Actionscript ?

Я действительно не могу сделать getChildByName, потому что это слишком громоздко: у меня есть доступ к объекту A, у которого есть ребенок B, у которого есть ребенок C, у которого есть дети D, E & F (их имена связанные с именем А). Я хочу получить D, E & F. Для getChildByName кажется, что я должен использовать A, чтобы получить B, затем получить C, а затем получить D, E & F. И если добавить нового родителя в B (изменить mxml иерархии), тогда код сломается ... И я действительно не хочу этого делать.

Любой совет? Thx!

Обновление: я спрашиваю, как мне получить доступ к объекту D по его имени и / или идентификатору, оба из которых являются строками.

Ответы [ 5 ]

19 голосов
/ 10 августа 2009

Поскольку дочерние элементы на самом деле похожи на «свойства» документа, вы должны иметь возможность сделать что-то вроде этого:

var elem: Type_of_E = this ["built_id_of_E"];

Если вы находитесь во вложенном документе, просто используйте parentDocument ["built_id_of_E"], чтобы получить элемент.

2 голосов
/ 10 августа 2009

На самом деле, когда вы назначаете им идентификатор, они становятся общедоступной переменной-членом данного элемента. Так, например, если у вас есть

<mx:Canvas><mx:Label id="myLabel" /></mx:Canvas>

Вы можете получить к нему доступ по его идентификатору в качестве имени переменной:

myLabel.text = "Hello world!";

Дайте мне знать, если вам нужно больше разъяснений. Если это не то, что вы просите, не стесняйтесь комментировать, и я сделаю еще один удар по нему.

С уважением, Chris

Обновление: все компоненты mxml доступны таким образом, независимо от того, сколько у них родителей

1 голос
/ 06 января 2010

Вы можете использовать getChildByName("childname")

1 голос
/ 21 августа 2009

Работает ли это с Flex 4?

У меня пустая сетка, созданная в MXML, затем в ActionScript я добавляю в следующем порядке:

  • сетка (внутри сетки) (id = "myGrid")
  • a gridItem (внутри gridRow)
  • комбинированный список (внутри gridItem) с динамически генерируемым идентификатором (например, "cmb" + i, где i - целое число).

Я пробовал это ["cmb" +0], myGrid ["cmb" +0], parentDocument ["cmb" +0] и каждый раз, когда я получаю "ReferenceError: Ошибка # 1069: свойство cmb0 не найден на adminUsers и нет значения по умолчанию " или «ReferenceError: Ошибка # 1069: свойство cmb0 не найдено в mx.containers.Grid и значение по умолчанию отсутствует»

Примечание: "adminUsers" - это имя моего приложения

Редактировать: если это может кому-то помочь, я решил свою проблему по-другому. Теперь я заполняю свою сетку ретранслятором

<mx:Grid id="myGrid">
                <mx:Repeater id="repeater" dataProvider="{lst1}">
                    <mx:GridRow>
                        <mx:GridItem><mx:Label text="{repeater.currentItem.name}" /></mx:GridItem>
                        <mx:GridItem><mx:ComboBox id="cmb" dataProvider="{lst2}" labelField="comment" /></mx:GridItem>
                    </mx:GridRow>
                </mx:Repeater>
            </mx:Grid>

Теперь я могу получить доступ к своим комбо в цикле с помощью чего-то вроде:

var combo:ComboBox = cmb[i] as ComboBox;

:)

0 голосов
/ 10 августа 2009

Если вы используете MXML, вы должны использовать flex. Если вы используете Flex, вы можете назначить идентификаторы своих товаров.

Пример:

<mx:Button
      id    = "myButton"
      label = "OK"
      click = "{myLabel.text = 'Button Pressed!'}"/>

<mx:Label
      id    = "myLabel"
      text  = "Push the button!"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...