Flex getElementsByName

时间:2012-03-18 01:17:58

标签: actionscript-3 flex getelementsbytagname

我知道Flex中没有getElementByName这样的函数,但我现在也可以执行此操作[“object_id”]来获取应用程序的元素。 如何在另一个元素中获取元素? 我试过制作element["id"]?但是在我的try-catch中它始终运行“catch”部分= \ 那么:如何在动态创建的字符串形式中获取其他元素中的元素?

提前谢谢

3 个答案:

答案 0 :(得分:3)

这取决于您尝试访问的元素类型。

  1. 可以通过拨打DisplayObjectContainer#getChildByName来访问子显示对象:
    element.getChildByName("name");

  2. 可以使用bracket syntax访问公共变量(可以设置为也包含子显示对象):
    element["name"];

    或仅使用dot syntaxelement.name

  3. (其中name是您尝试访问的属性的名称)。

    请注意,您在Flash IDE中拖动到舞台的任何实例都将automatically be assigned to a public variable,如果您有"自动声明舞台实例"在导出设置中选中了选项。这就是使用this[name]的原因。

答案 1 :(得分:0)

如果我理解正确,那么您需要一种方法来获取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。它只是遍历显示列表(深度优先)并选择具有指定名称的所有对象。

答案 2 :(得分:0)

如果您要在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);               
}