Action Script 3 のデータ埋め込みについて。
Flex の HTMLコントロールに予め固定のドキュメントを指定したかったので、
こんな風に書けたらなぁ・・・と思いつつ、ちょっと調べてみました。
ちなみに、上記の記述は「htmlTextは@embedに対応して無いよ」と怒られました。
Flex の HTMLコントロールに予め固定のドキュメントを指定したかったので、
<mx:HTML width="0%" height="100%" htmlText="@embed(source='help.html')"/>
ちなみに、上記の記述は「htmlTextは@embedに対応して無いよ」と怒られました。
Embed
as3 で、「データを埋め込む」となると、大抵は Embed を使う事になると思います。以下、pngファイルイメージ埋め込みの例。→参照:アセットの埋め込み
<mx:Script>
<![CDATA[
[Embed(source = "smp.png")][Bindable]public var imgSample:Class;
]]>
</mx:Script>
<mx:Image source="{imgSample}"/>
jpg、png、gif、swf、mp3あたりは拡張子からデータ種別を自動判別してくれるようです。
→参考:アプリケーションアセットの埋め込み
これら以外のデータを指定する場合や、データファイルの拡張子から内容が判別できない場合、意図的にデータ型を指定したい場合は、mimetype 指定をする必要があります。
しかし、アセットの埋め込みについてに書かれているように、指定できる型は限られていて、テキストやHTML、バイナリデータなどは全て「application/octet-stream」を明示的に指定する必要があります。
コンパイラが型を認識できないと、エラーが出てしまうのです。
結局
結局、冒頭にあったコードは以下のようにしてやりたかったことを実現できる事が判りました。
<mx:Script>
<![CDATA[
[Embed(source = "help.html", mimeType="application/octet-stream")]
public var helpDoc:Class;
]]>
</mx:Script>
<mx:HTML width="0%" height="100%" htmlText="{new helpDoc()}"/>
テキストもバイナリデータ列として取り込まれるようです。エンコードが必要なテキストを扱う場合は、データを扱う前にデコードをするなどの工夫が必要になります。

コメントする