Flex4.5 sparkコンポーネントのTextAreaでENTERの改行キャンセル事情

http://d.hatena.ne.jp/yuichi_katahira/20110124/1295886258

前にFlex4のTextArea*1で改行をキャンセルするにはという記事を書きました。
で、Flex4.5が出たらまたちょっと変わったので書いておきます。


4.1の要点をまとめておくと、通常のキーボードイベントではFlex3までのように改行をとれないので、TextOperationEvent.CHANGINGで補足しておいてどうにかするという話でした。
で、4.5でどう変わったのかですが、ENTER単独は相変わらずTextOperationEvent.CHANGINGで取るしかないのですが、Ctrol+Enterなど、CtrlやAltと組み合わさってEnterが押された場合は、通常のキーボードイベントで取得可能というふうに変わりました。


これで具体的にどう変わったのか、例えばCtrl+EnterでTwitterに投稿等を割り当てていた場合をみてみます。

4.1ではCtrl+ENterを補足するKEY_DOWNの時点で、既に改行(SplitOperationによって分割される)が行われている状態になっているので、先に発生するTextOperationEvent.CHANGINGで待ち受けて、ここで改行前のTextAreaのテキストを変数に保持しておきます。KEY_DOWNでCtrl+Enterを補足したら、TextAreaのテキストを改行前に差し替えし、投稿する、というような流れになります。


4.5ではCtrl+Enterで補足するKEY_DOWNで、まだ改行が行われていません。このため、差し替え処理などせずに、普通に投稿処理を投げれば良くなります。


簡単になりましたね。もうちょっと早くリリースしてもらえれば時間とられなくてすんだんですけどね。


なお、上にも書いたとおり、ENTER単独は相変わらずTextOperationEvent.CHANGINGで取る必要があります。例えばSOICHAではオートコンプリート対象の確定処理などで、TextOperationEvent.CHANGINGで処理を行っています。

*1:editable=trueにした、RichEditableTextも同様