アーカイブ

DateField 小ネタ

時分秒 (hh:mm:ss) の値を含んだ Date オブジェクトを selectedDate プロパティにセットすると、アイコンをクリックしたとき表示されるカレンダーに、セットした日にち (DD) がフォーカスされない…という不具合が発生します。

この現象、Flex 3 では解消されていますが、時間情報を含んだ日付情報を扱うような Flex 2 アプリを作るときには、注意が必要です。(余談ですが、fla ファイル (AS 2.0) で扱える DateField コンポーネントでは、上記現象は発生しません)

以下検証コード

<?xml version="1.0" encoding="utf-8"?>
<!-- DateFieldShotTest -->
<mx:Application
    xmlns:mx         = "http://www.adobe.com/2006/mxml"
    layout           = "vertical"
    creationComplete = "init();">

    <mx:Script>
        <![CDATA[
            private function dateOutput():void
            {
                traceText.text = String(comp_0_DF.selectedDate)+'\n'+
                                 String(comp_1_DF.selectedDate)+'\n'+
                                 String(comp_2_DF.selectedDate)+'\n'+
                                 String(comp_3_DF.selectedDate)+'\n'+
                                 String(comp_4_DF.selectedDate);
            }
            private function init():void
            {
                traceText.text = '';
                comp_0_DF.selectedDate = new Date();
                comp_1_DF.selectedDate = new Date(2007, 0, 23);
                comp_2_DF.selectedDate = new Date(2007, 0, 23, 0, 0, 0);
                comp_3_DF.selectedDate = new Date(2007, 0, 23, null, null, null);
                comp_4_DF.selectedDate = new Date(2007, 0, 23, 12, 34, 56);
            }
        ]]>
    </mx:Script>

    <mx:Style>
        Label
        {
            font-weight: bold;
        }
    </mx:Style>

    <mx:VBox width="400" textAlign="left">

        <mx:HBox>
            <mx:DateField id="comp_0_DF" />
            <mx:Label text="new Date();" />
        </mx:HBox>

        <mx:HBox>
            <mx:DateField id="comp_1_DF" />
            <mx:Label text="new Date(2007, 0, 23);" />
        </mx:HBox>

        <mx:HBox>
            <mx:DateField id="comp_2_DF" />
            <mx:Label text="new Date(2007, 0, 23, 0, 0, 0);" />
        </mx:HBox>

        <mx:HBox>
            <mx:DateField id="comp_3_DF" />
            <mx:Label text="new Date(2007, 0, 23, null, null, null);" />
        </mx:HBox>

        <mx:HBox>
            <mx:DateField id="comp_4_DF" />
            <mx:Label text="new Date(2007, 0, 23, 12, 34, 56);" color="#CC0000" />
        </mx:HBox>

    </mx:VBox>

    <mx:TextArea  id="traceText" width="400" height="100" />

    <mx:HBox>
        <mx:Button label="trace" click="{dateOutput()}" />
        <mx:Button label="reset" click="{init()}" />
    </mx:HBox>

</mx:Application>