我知道Flex中没有getElementByName这样的函数,但我现在也可以执行此操作[“object_id”]来获取应用程序的元素。
如何在另一个元素中获取元素?
我试过制作element["id"]
?但是在我的try-catch中它始终运行“catch”部分= \
那么:如何在动态创建的字符串形式中获取其他元素中的元素?
提前谢谢
答案 0 :(得分:3)
这取决于您尝试访问的元素类型。
可以通过拨打DisplayObjectContainer#getChildByName来访问子显示对象:
element.getChildByName("name");
可以使用bracket syntax访问公共变量(可以设置为也包含子显示对象):
element["name"];
或仅使用dot syntax:element.name
(其中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);
}