私はmxmlコンポーネントを持っており、その中で作成したすべての子を調べたいので、深くは行きません。たとえば、私はこの見解を持っています:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:chat="org.mirapolis.virtualroom.chat.*"
height="100%" width="100%"
initialize="init()" >
<fx:Script>
<![CDATA[
import org.mirapolis.virtualroom.chat.ChatModule;
private function init() : void{
setDisplayStrategy(this);
}
private function setDisplayStrategy(element : UIComponent) : void{
for(var i : int = 0; i < element.numChildren; i++){
var child : UIComponent = element.getChildAt(i) as UIComponent;
if (child != null && child.descriptor != null){
trace(child);
setDisplayStrategy(child);
}
}
}
]]>
</fx:Script>
<mx:VBox>
<mx:Form>
<mx:FormItem label="email">
<s:TextInput id="email" />
</mx:FormItem>
<mx:FormItem>
<s:Button
label="submit" />
</mx:FormItem>
</mx:Form>
</mx:VBox>
<chat:ChatView id="id1" />
<chat:ChatView id="id2" />
</mx:VBox>
そしてトレースは私にこれを与えるでしょう
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem10
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem10.email
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem16
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem16.Button17
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id1
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id2
それはまさに私が必要としているものです。しかし、ビューにスパーク要素を追加すると、child.descriptor
が与えnull
られ、すべてが崩壊します。チェックしないchild.descriptor
と、このコードはすべてのコンポーネントでさらに深くなりますが、これは絶対に必要ありません。
だから私の質問は-mxmlビューに追加されたすべての子を取得することは可能ですか?
UPD: 今ではうまく機能します:
public static function setDisplayStrategy(element : UIComponent) : void{
trace(element);
if (element is IVisualElementContainer){
for(var i : int = 0; i < (element as IVisualElementContainer).numElements; i++){
var child : UIComponent = (element as IVisualElementContainer).getElementAt(i) as UIComponent;
if (child){
setDisplayStrategy(child);
}
}
}
}
しかし、それでもあまりにも多くの深みが必要です。
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem10
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem10.email
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem16
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.VBox8.Form9.FormItem16.Button17
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id1
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id1.chatWrapper
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id1.chatWrapper.ScrollerSkin28.Group24
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id1.chatWrapper.ScrollerSkin28.Group24.chatArea
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id1.userMessage
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id1.send
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id2
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id2.chatWrapper
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id2.chatWrapper.ScrollerSkin105.Group101
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id2.chatWrapper.ScrollerSkin105.Group101.chatArea
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id2.userMessage
videoconference.ApplicationSkin2._ApplicationSkin_Group1.contentGroup.MainView7.id2.send
私の例では、MainView7.id1とMainView7.id2で停止することはできますか?