0

数値ステッパーがあり、そのテキスト ボックスにイベント リスナーを追加したいと考えています。

use namespace mx_internal;
durationStepper.inputField.addEventListener(Event.CHANGE,durationStepperTextInputChanged);

private function durationStepperTextInputChanged(event:Event):void
{ 
    use namespace mx_internal;
    trace(durationStepper.inputField.text);
}

ただし、イベント機能は実行されません! そこにブレイクポイントを入れても届かない!ここで何が欠けていますか?ありがとう。

4

1 に答える 1

3

問題は、開発者が Change イベントの発生を止めたことです。NumericStepper のソース ファイルに移動すると、それを見つけることができます。イベントの取得を妨げる 2 つの関数を次に示します。

override protected function createChildren():void
{
    super.createChildren();

    if (!inputField)
    {
        inputField = new TextInput();

        //some code

        //some code

        inputField.addEventListener(Event.CHANGE, inputField_changeHandler);

        addChild(inputField);
    }
}

private function inputField_changeHandler(event:Event):void
{
    // Stop the event from bubbling up.
    event.stopImmediatePropagation();

    var inputValue:Number = Number(inputField.text);
    if ((inputValue != value &&
        (Math.abs(inputValue - value) >= 0.000001 || isNaN(inputValue))) || 
        inputField.text == "")
    {
        _value = checkValidValue(inputValue);
    }
}

ご覧のとおり、2 番目の関数には event.stopImmediatePropagation(); があります。

この場合、2 つの選択肢があります。ロジックを実装する別の方法を見つけるか、コンポーネントのソース コードをコピーしてこのコード行を削除するかです。

関数をオーバーライドしても問題ありませんが、非公開です。

この一般的な問題については、こちらで読むことができます

私は2番目の方法を選択しようとしました。それは完全に機能します!*.as ファイルだけでなく、その中で使用される他のファイルもあります。

コンポーネントはここからダウンロードできます。

于 2013-01-29T17:03:43.867 に答える