Flex getElementByName - PullRequest
       28

Flex getElementByName

0 голосов
/ 18 марта 2012

Я знаю, что в Flex нет такой функции, как getElementByName, но я также теперь, когда вы можете сделать это ["object_id"], чтобы получить элемент приложения, в котором вы находитесь. Как насчет получения элемента внутри другого элемента?Я пытался сделать element["id"]?Но в моем try-catch он всегда запускает часть «catch» = \ Итак: как мне получить элемент внутри другого элемента, просто имея его идентификатор в динамически создаваемой строковой форме?

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 18 марта 2012

Это зависит от того, к какому элементу вы пытаетесь получить доступ.

  1. Для доступа к дочернему экранному объекту можно вызвать DisplayObjectContainer # getChildByName :
    element.getChildByName("name");

  2. AДоступ к общедоступной переменной (которая также может содержать дочерний экранный объект) можно получить, используя синтаксис скобок :
    element["name"];

    или просто используя точечный синтаксис : element.name

(где name - имя свойства, к которому вы пытаетесь получить доступ).

Обратите внимание, что любой экземпляр, который вы перетаскиваете на сцену вFlash IDE будет автоматически назначаться общедоступной переменной , если в настройках экспорта установлен флажок «автоматически объявлять экземпляры сцены».Вот почему использование this[name] работает.

0 голосов
/ 18 августа 2014

Если вы ищете элемент в Group, вы можете использовать эту функцию:

static function getElementByName(group:GroupBase, name:String):IVisualElement {
    const child:DisplayObject = group.getChildByName(name);
    const index:int = group.getChildIndex(child);
    return group.getElementAt(index);               
}
0 голосов
/ 19 марта 2012

Если я правильно понимаю, вы запрашиваете способ получить все "элементы" в приложении Flex с определенным именем.

Вот пример (Flex 3):

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*">
  <mx:Script>
    <![CDATA[
      private function testIt():void
      {
        var arr:Array = getDisplayObjectsByName(this, "foo");
        for each (var e:* in arr)
          trace(e);
      }

      private static function getDisplayObjectsByName(node:DisplayObjectContainer,
          name:String, recurse:Boolean = true):Array
      {
        var n:int = node.numChildren;
        var a:Array = [];
        for (var i:int = 0; i < n; i++) {
          var c:DisplayObject = node.getChildAt(i);
          if (c.name == name)
            a.push(c);

          if (recurse) {
            if (c is DisplayObjectContainer)
              a = a.concat(getDisplayObjectsByName(DisplayObjectContainer(c),
                  name, true));
          }
        }

        return a;
      }
    ]]>
  </mx:Script>
  <mx:VBox name="foo">
    <mx:HBox>
      <mx:Button name="foo" label="Test" click="testIt()" />
    </mx:HBox>
  </mx:VBox>
  <mx:Label text="Ignore Me" />
  <mx:VBox name="bar">
  </mx:VBox>
</mx:Application>

Здесь мы ищем все элементы, называемые "foo", когда пользователь нажимает кнопку "Тест".

Вывод:

main0.foo
main0.foo.HBox5.foo

Вы заметите, чтоgetDisplayObjectsByName() - это static.Все, что он делает - это просматривает список отображения (сначала в глубину) и выбирает все объекты с указанным именем.

...