Подтвердить что ты не робот

Эквивалент getElementById в ActionScript?

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

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

Любые советы? спасибо!

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

myLabel.text = "Hello world!";

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

С уважением, Крис

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

Ответ 3

Это работает с Flex 4?

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

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

Я пробовал это [ "cmb" +0], myGrid [ "cmb" +0], parentDocument [ "cmb" +0] и каждый раз, когда я получаю "ReferenceError: Ошибка # 1069: Свойство cmb0 not найденных на 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;

:)

Ответ 4

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

Ответ 5

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

Пример:

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

<mx:Label
      id    = "myLabel"
      text  = "Push the button!"/>