Acessando SWFs incorporados no Spark SWFLoader

Quando incorporamos um swf usando

<s:SWFLoader id="foo" source="@Embed(source='foo/bar/file.swf')"/> 

Uma das coisas mais frustrantes é acessar o conteúdo do elenco da classe dentro.
Digamos que façamos um FLA e atribuamos

com.example.component.BazzComponent 

à classe de documentos do FLA.

Queremos trabalhar com os filhos deste componente e atribuímos nomes de instância adequadamente e semelhantes.

Compilamos o FLA em um swf e estamos felizes, então o incorporamos.
Agora descobrimos, ao depurar e inspecionar o carregador, que a propriedade foo.content contém um grande e feio ByteArray! Onde está nosso swf ?!

Isso não é tão difícil quanto parece!

Usando o código mostrado abaixo, você pode acessar facilmente o SWF por meio da classe Document principal. O truque é exportar o fla como um SWC para importar a definição da classe e também incorporar o arquivo no carregador como um SWF.

O resto é simples arquitetura flex, você tem que acessar o conteúdo do loader como um MovieClip. O primeiro filho do MovieClip será um carregador que carregará o componente real. Acesse a propriedade de conteúdo desse carregador e aí você tem o documento FLA.

protected function get bazz():BazzComponent {
var mc:MovieClip = contentLoader.content as MovieClip
var loader:Loader = mc.getChildAt(0) as Loader;
return loader.content as BazzComponent;
}

<s:SWFLoader id="contentLoader"
source
="@Embed(source='com/example/foo/assets/bazz.swf')"
width
="233" height="32"
right
="0"
y
="1"
trustContent
="true"
autoLoad
="true"
/>