Эквивалент 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 с его именем и/или идентификатором, оба из которых являются строками.
Ответы
Ответ 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!"/>