0

我知道 Flex 中没有 getElementByName 这样的功能,但我现在也可以这样做 ["object_id"] 来获取您所在的应用程序的元素。在另一个元素中获取一个元素怎么样?我试过制作element["id"]?但是在我的 try-catch 中,它总是运行“catch”部分 =\ 所以:我如何在另一个元素中获取一个元素,而它的 id 是动态创建的字符串形式?

先感谢您

4

3 回答 3

3

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

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

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

    或简单地使用点语法element.name

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

请注意,如果您在导出设置中选中了“自动声明阶段实例”选项,那么您在 Flash IDE 中拖动到阶段的任何实例都将自动分配给一个公共变量。这就是使用this[name]工作的原因。

于 2012-03-18T09:28:26.177 回答
0

如果你正在寻找 a 中的元素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);               
}
于 2014-08-18T04:32:18.337 回答
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. 它所做的只是遍历显示列表(深度优先)并挑选出所有具有指定名称的对象。

于 2012-03-19T00:08:14.783 回答