私は Flex の初心者で、カートをシミュレートする小さなアプリケーションをテストしています。(これは、Farata Systems の Yakov Fain による素敵なサンプルに基づいています)。注: アプリケーションのコーディングには Flash Builder 4 のベータ版を使用しています。
ここにスクリーンショットへのリンクがあります: スクリーンショット
(stackoverflow では新しいユーザーがイメージ タグを使用することを許可していないため、ここにスクリーンショットのイメージを挿入できません。)
アプリケーションは非常に簡単です。TextInput コントロールに製品を入力し、[カートに追加] ボタンをクリックして、下部の TextArea で表される「カート」に製品を追加します。
それはうまくいきます。
問題は、ユーザーが「カートに追加」ボタンをクリックしなくてもカートにアイテムを追加し続けられるようにしたいことです。そこで、「カートに追加」クリック イベントによってトリガーされる同じハンドラー関数を呼び出して、TextInput の enter イベントを処理するコードを追加しました。
コンテンツを入力して [カートに追加] ボタンをクリックすると、TextInput コントロールがフォーカスとカーソルを受け取り、再度入力できるようになります。ただし、ボタンをクリックする代わりに Enter キーを押すと、TextInput コントロールはフォーカスされたままになり、カーソル ビームが表示されますが、他の場所をクリックしてコントロールに戻るまでテキストを入力することはできません。
以下に、コードの関連部分を示します。上部に 3 つのコントロール (Label、TextInput、Button) をグループ化するコンポーネントの定義があります。
助言がありますか?
<?xml version="1.0" encoding="utf-8"?>
<fx:Script>
<![CDATA[
protected function newItemHandler():void
{
import cart.ItemAddedEvent;
var e : ItemAddedEvent = new ItemAddedEvent( "->" + textInputItemDescription.text );
textInputItemDescription.text = "";
textInputItemDescription.setFocus();
textInputItemDescription.setSelection(0,0);
dispatchEvent( e ); // Bubble to parent = true
trace( "I just dispatched AddItemEvent " + e.toString() + "\n Content = " + e.itemDescription );
}
]]>
</fx:Script>
<fx:Metadata>
[Event(name="ItemAddedEvent",type="cart.ItemAddedEvent",bubbles=true)]
</fx:Metadata>
<mx:Label text="Item description:"/>
<s:TextInput id="textInputItemDescription" enter="newItemHandler() "/>
<s:Button click="newItemHandler()" label="Add to cart"/>