as3: как использовать внуков?ех.getChildByName ( "имя"). getChildByName ( "name2") - PullRequest
2 голосов
/ 11 июля 2010

Я ищу метод, чтобы получить динамически созданные дочерние элементы экземпляра экранного объекта в ?

trace(_view.getChildByName("name")) //returns name of display object (success)

trace(_view.getChildByName("name").getChildByName("name2")) //returns error 1061

Ответы [ 3 ]

3 голосов
/ 13 июля 2010

Хотя я уверен, что ответ Майкла Аарона может быть полезным ... когда мне нужно сослаться только на один или два элемента, я делаю это так:

trace( MovieClip( MovieClip( _view.getChildByName("name") ).getChildByName("name2") ).name );

Это просто принуждает экранный объект действовать как мувиклип, чтобы я мог прочитать его свойство name и использовать любой из методов MoveClip для него.

Если вам нужно сослаться на весь экран, может быть что-то более сложное ...

Вы также можете использовать его для доступа к труднодоступным TextFields .... trace (TextField (MovieClip (_view.getChildByName ("name")) .getChildByName ("textfieldName")) .text);

3 голосов
/ 11 июля 2010

Да, вы можете. Проблема состоит в том, что DisplayObjectContainer.getChildByName () возвращает тип DisplayObject , а произвольный экранный объект может быть или не быть DisplayObjectContainer . Итак, хотя вы можете сделать это, вам сначала нужно привести тип результата к DisplayObjectContainer:

public static function getGrandChildByName(
         parent : DisplayObjectContainer,
         child : String,
         grandchild : String
) : DisplayObject {
    var child_obj : DisplayObject = parent.getChildByName(child);
    var child_container : DisplayObjectContainer = child_obj as DisplayObjectContainer;
    return child_container.getChildByName(grandchild);
}

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

Также, последнее замечание: если вы используете тип MovieClip, вы можете просто обратиться к объекту по его имени:

  myclip.mc_child.mc_grandchild.gotoAndStop(3);

Просто ссылаться на элементы по имени проще и менее подвержено ошибкам. Я настоятельно рекомендую это.

0 голосов
/ 06 мая 2013
var parentMc1:Object=this.parent.getChildByName('myMc1') as Object;
var parentInMc2:Object=parentMc1.getChildByName('myMc2') as Object;

//parent.myMc1.myMc2.gotoAndStop(2); // WRONG
parentInMc2.gotoAndStop(2);  // TRUE
_______________
var parentMc2..
var parentMc3..
var parentMc4..
.
.
. 
Limitless mc using
...