2011-01-08 3 views
0

У меня есть некоторый код следующим образом:Adobe 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.

ОК, поэтому в первый раз, когда я запускаю это, он отлично работает; df_date остается неизменным, а df_dateDue устанавливается на 5 дней после df_date. Однако в следующий раз, когда я запустил его, df_dateDue увеличится на 10 дней с df_date, в следующий раз на 15 и т. Д.

Итак, переходя через код, показано, что каким-то образом df_date привязана к temp var и что temp var не сбрасывает себя каждый раз, когда вызывается функция.

Пример: df_date = 01 Jan, df_dateDue = 1 января

  1. Огонь от события, df_date = 01 Jan, df_dateDue = 6 января

  2. Огонь от события снова. На данный момент var temp = 06 Jan (хотя df_date все еще показывает 01 января), а затем df_dateDue устанавливается на 11 января

  3. Снова погасить событие. На данный момент темп вар = 11 января (даже если df_date = 01 января), и df_dateDue затем устанавливается на 16 января

Что я здесь отсутствует?

ответ

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 не может скопировать Date object.var temp: Object = ObjectUtil.copy (view.df_date); var d: Date = temp.selectedDate; – JonoB

+0

@jonoB Возможно, вы могли бы бросить его в одну строку. Я уточню свой ответ. – JeffryHouser