1

Flash Builder 4.5 で MXML プロジェクトをビルドしています。

TextInput フィールドを含むカスタム MXML コンポーネントがあります。カスタム コンポーネントに、メイン アプリケーションの関数をトリガーする変更イベントを持たせたいと考えています。

私はこのサイトを検索し、私が望むものに近い多くの投稿を見つけましたが、必要なものを正確に見つけることができず、今非常に混乱しています.

これを解決するためにテストプロジェクトを作成しました。現時点では、イベントを 1 回トリガーしてから停止しているように見えます。見て、どこが間違っているのか教えてください。どうもありがとう。

customComponent.mxml

    <?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
           width="40" height="20"> 
    <mx:Script>
    <![CDATA[

        [Bindable]
        public var value:Number;

        protected function inputBox_clickHandler(event:KeyboardEvent):void
        {
            if (event.keyCode == 38 ) {
                keyUp();
            }
            if (event.keyCode == 40 ) {
                keyDown();
            }
        }
        protected function keyUp():void
        {
            value = value++;
            dispatchEvent(new Event('change'))
        }
        protected function keyDown():void
        {
            value = value--;
            dispatchEvent(new Event('change'))
        }
    ]]> 
</mx:Script>
<mx:Metadata>
    [Event(name="change", type="flash.events.Event")]
</mx:Metadata>

<mx:TextInput id="inputBox" x="0" y="0" width="40" height="20"
              text="{value}"
              keyDown="inputBox_clickHandler(event)"
              change="dispatchEvent(new Event('change'))" 
              />
 </mx:Canvas>

main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
            xmlns:CustomComponents="CustomComponents.*"
            minWidth="955" minHeight="600" layout="absolute">
<mx:Script>

    <![CDATA[

        private function changeTestLabel():void 
        {
            testLabel.text = String(myComponent.value);
        }

    ]]> 

</mx:Script>
<CustomComponents:customComponent x="180" y="183"
    id="myComponent" value="0"
    change="changeTestLabel()">
</CustomComponents:customComponent>
<mx:Label id="testLabel" x="165" y="206" text="Test label"/>

</mx:Application>
4

1 に答える 1

0

私はこれに対する解決策を見つけました...

手がかりは、最初に変更が行われたときに機能し、値をデフォルトの「0」に変更したことです。問題は、var 値が Number 型で、inputBox.text が String 型であることです。

したがって、次の機能を追加しました。

  protected function textChange():void
  {
   value = Number(inputBox.text);
   dispatchEvent(new Event('change'))
  }

change="dispatchEvent(new Event('change'))" プロパティも変更しました

valueCommit="textChange()"

...そしてそれはそれを修正しました。

わざわざ見てくださった方々、ありがとうございました。

于 2012-11-29T20:26:40.947 に答える