我知道有作为getElementByName Flex中没有这样的功能,但我也现在你可以做到这一点[“OBJECT_ID”]获取应用程序你就像的元素英寸 什么里面得到一个元素另一个元素? 我试过制作element["id"]
?但是在我的try-catch中,它总是运行“catch”部分= \ 所以:我如何在另一个元素中获取一个元素,并将它的id设置为动态创建的字符串形式?的Flex getElementByName
预先感谢您
我知道有作为getElementByName Flex中没有这样的功能,但我也现在你可以做到这一点[“OBJECT_ID”]获取应用程序你就像的元素英寸 什么里面得到一个元素另一个元素? 我试过制作element["id"]
?但是在我的try-catch中,它总是运行“catch”部分= \ 所以:我如何在另一个元素中获取一个元素,并将它的id设置为动态创建的字符串形式?的Flex getElementByName
预先感谢您
这取决于你试图访问什么样的元素。
子显示对象可以通过调用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]
的原因。
如果我理解正确,您需要一种方法来获取具有特定名称的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>
在这里,我们正在寻找一切所谓的“富”,当用户点击“测试”按钮的元素。
输出:
main0.foo
main0.foo.HBox5.foo
你会发现,getDisplayObjectsByName()
是static
。它所做的只是遍历显示列表(深度优先),并挑选出具有指定名称的所有对象。
我现在没有可能测试它,但我提前感谢你!顺便说一下,我只想在第一级儿童中获得“foo”元素。所以只是VBox =)我认为我只需要删除最后一条if语句,对吧? ;) – 2012-03-19 09:19:57
@AndreaSilvestri我已将名称更改为“getDisplayObjectsByName”,以反映我们正在寻找“DisplayObject”而不是“元素”(如XML元素)的事实,并且还添加了一个'recurse'参数,它在默认情况下是'true'。 – Manish 2012-03-19 17:59:59
如果你在一个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);
}
我谈论FLEX这里,没有舞台等等。我也在谈论UIComponent对象,它没有孩子,但元素。仅供参考,我现在正在使用TabNavigator。 – 2012-03-18 16:43:36
那么,这是很好的信息 - 也许你应该在下次你的问题时加上这个。无论如何,请查看UIComponent和* tada *的信息:它是DisplayObjectContainer的子类... http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#getChildByName () – weltraumpirat 2012-03-18 23:43:05
而仅供参考它*有*有孩子。 – weltraumpirat 2012-03-18 23:43:45