我知道有作爲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