2011-01-08 94 views
0

我有一些代码如下:Adob​​e Flex的的DateField

private function onComboChange(evt:Event):void { 
    var temp:Date = df_date.selectedDate; 
    temp.date += 5; 
    df_dateDue.selectedDate = new Date(temp); 
} 

从本质上说,我想5天添加到在df_date选定的日期,并把该日期为df_dateDue。这通过组合框上的EventListener触发。 df_date和df_dateDue都是dateFields。 OK,所以我第一次运行它,它工作正常; df_date保持不变,df_dateDue设置为df_date之后的5天。但是,下次运行它时,df_dateDue会从df_date增加10天,下一次增加15,依此类推。

因此,单步执行代码表明df_date已经链接到temp var,并且temp var在每次调用该函数时都不会重置自身。

示例:df_date = 01一月,df_dateDue = 1月1日

  1. 消防关闭的情况下,df_date = 01一月,df_dateDue = 01月06日

  2. 消防关闭事件一次。此时,var temp = 06 Jan(即使df_date仍显示01 Jan),然后df_dateDue将设置为11 Jan

  3. 再次触发事件。此时var temp = 11 Jan(即使df_date = 01 Jan),然后df_dateDue被设置为16 Jan

我在这里丢失了什么?

回答

2

在Flex/AS中,包含对象的变量实际上只是指向某些内存空间的指针。 Flex中的日期是对象,而不是本机类型。此行:

var temp:Date = df_date.selectedDate; 

创建一个指向现有日期对象的新指针。它不创建副本。

这条线:

temp.date += 5; 

递增dateObject日期属性。指向该日期对象的所有引用都将被更新。尝试使用objectUtil.copy

var temp:Date = ObjectUtil.copy(df_date.selectedDate) as Date; 

哦,并得到您的接受率。

+0

感谢您的回答。我不得不作出以下更改,因为它似乎ObjectUtil不能复制日期object.var temp:Object = ObjectUtil.copy(view.df_date); var d:Date = temp.selectedDate; – JonoB 2011-01-09 12:19:04