0

我有一个包含用户出生日期的数据库,但我想显示他们的年龄。我有一个计算年龄的函数,但我不能在 ItemRenderer 中使用它,我不知道为什么。如果我在 ItemRenderer 之外使用此代码,我认为它不会起作用。DOB 由 访问{data.dob}

这是我的代码:

<s:GridColumn dataField="age" headerText="Age" width="80">
                    <s:itemRenderer>
                        <fx:Component>
                            <s:GridItemRenderer>
                                <fx:Script>
                                    <![CDATA[
                                        // Retrieving the user's DOB
                                        var dateStr:String = "{data.dob}";
                                        //Splitting the DOB up to make it compatible with Flex
                                        var parts:Array = dateStr.split("-");

                                        if(parts == null || parts.length != 3)
                                        {
                                            Alert.show("There is an error retrieving the birthday.");
                                        }

                                        var dobDay:* = parts[2];
                                        var dobMonth:* = parts[1] - 1;
                                        var dobYear:* = parts[0];

                                        var userDOB : Date = new Date(dobYear, dobMonth, dobDay);
                                        var today : Date = new Date();

                                        var diff : Date = new Date();
                                        diff.setTime( today.getTime() - userDOB.getTime() );

                                        var userAge : int = diff.getFullYear() - 1970;
                                    ]]>
                                </fx:Script>
                                <s:Label id="ageLbl" text="userAge" />
                            </s:GridItemRenderer>
                        </fx:Component>
                    </s:itemRenderer>
                </s:GridColumn>`

起初我收到 #1084 错误,var dateStr:String = {data.dob};因此我将其更改为var dateStr:String = "{data.dob}";并将错误迁移到1120: Access of Undefined property Alert. 我也有同样的错误:diff, parts, today, userAge, userDOB。这里有什么想法吗?就像我说的那样,代码在 ItemRenderer 之外时工作,只使用一个 DOB。

4

2 回答 2

0

您正在使用内联项目渲染器。以与外部文件中的项目渲染器相同的方式来考虑内联渲染器。您需要重新导入 mx.controls.Alert 才能使用它。此外,如果您想从 itemRenderer 内部调用主应用程序变量,则需要在主应用程序中将它们设为公共变量。

于 2012-05-08T09:43:45.510 回答
0

试试这个:

<s:DataGrid x="71" y="58" width="490" height="264" requestedRowCount="4">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField="dataField1" headerText="Column 1"></s:GridColumn>
            <s:GridColumn dataField="dataField2" headerText="Column 2"></s:GridColumn>
            <s:GridColumn dataField="dob" headerText="Age" width="80">
                <s:itemRenderer>
                    <fx:Component>
                        <s:GridItemRenderer>
                            <fx:Script>
                                <![CDATA[
                                    import mx.controls.Alert;

                                    override public function prepare(hasBeenRecycled:Boolean):void {

                                        if(data!=null)
                                        {
                                            trace(data.dob);

                                            // Retrieving the user's DOB
                                            var dateStr:String = data.dob;
                                            //Splitting the DOB up to make it compatible with Flex
                                            var parts:Array = dateStr.split("-") ;

                                            if(parts == null || parts.length != 3)
                                            {
                                                Alert.show("There is an error retrieving the birthday.");
                                            }

                                            var dobDay:* = parts[2];
                                            var dobMonth:* = parts[1] - 1;
                                            var dobYear:* = parts[0];

                                            var userDOB : Date = new Date(dobYear, dobMonth, dobDay);
                                            var today : Date = new Date();

                                            var diff : Date = new Date();
                                            diff.setTime( today.getTime() - userDOB.getTime() );

                                            var userAge : int = diff.getFullYear() - 1970;

                                            ageLbl.text = userAge.toString(); 
                                        }
                                    }

                                ]]>
                            </fx:Script>
                            <s:Label id="ageLbl" text="userAge"  top="7" left="9"/>
                        </s:GridItemRenderer>
                    </fx:Component>
                </s:itemRenderer>
            </s:GridColumn>

        </s:ArrayList>
    </s:columns>
    <s:ArrayList>
        <fx:Object dataField1="data1" dataField2="data1" dob="1990-05-25"></fx:Object>
        <fx:Object dataField1="data2" dataField2="data2" dob="1981-02-15"></fx:Object>
        <fx:Object dataField1="data3" dataField2="data3" dob="1956-05-7"></fx:Object>
        <fx:Object dataField1="data4" dataField2="data4" dob="1994-08-25"></fx:Object>
    </s:ArrayList>
</s:DataGrid>
于 2012-05-08T09:58:00.373 回答