データバインディング式で比較演算子を使う際のバッドノウハウ

唐突にAdobe Flexのお話。

Flexにはデータバインディングという便利な機能があるのですが、

今回、とあるボタンの有効/無効の切り替えのために、

<mx:Button label="実行" enabled="{ hogehoge.length < 5 }" />

という比較演算子を使った条件を書くと

Error: The value of attribute "enabled" must not contain the '<' character.

というコンパイルエラーが発生しました。


色々と試してみた結果、コンパイルエラーを回避する方法は以下の2つ。

1. '<'(小なり)ではなく、'>'(大なり)を使う

<mx:Button label="実行" enabled="{ 5 > hogehoge.length }" />

2. '<'を実体参照'&lt;'で書く

<mx:Button label="実行" enabled="{ hogehoge.length &lt; 5 }" />

他にも

論理演算子に使う'&'(アンパサンド)も使えないみたいです。

XML の解析規則により、MXML ファイルのデータバインディング式でアンパサンド文字 & を使用する場合は、16 進数に相当する文字 & に置き換える必要があります。例えば、ActionScript で記述された論理 OR 式で && を使用する場合は、次の例が示すように && のように記述する必要があります。

<mx:Button label="Test" enabled="{authorized &amp;&amp; cc}" /> 
データバインディング式でのアンパサンド文字の使用 - Adobe Flex 3 ヘルプ