0

私は次のようないくつかのコードを持っています:

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

本質的に、私はdf_dateで選択した日付に5日を追加し、その日付をdf_dateDueに入れようとしています。これは、コンボボックスのEventListenerを介して起動します。df_dateとdf_dateDueはどちらもdateFieldsです。

OK、これを初めて実行するときは、正常に動作します。df_dateは同じままで、df_dateDueはdf_dateの5日後に設定されます。ただし、次に実行すると、df_dateDueはdf_dateから10日ずつ増加し、次回は15日ずつ増加します。

したがって、コードをステップスルーすると、df_dateが一時変数にリンクされ、関数が呼び出されるたびに一時変数がリセットされないことがわかります。

例:df_date = 01 Jan、df_dateDue =01Jan。

  1. イベントを開始します、df_date = 01 Jan、df_dateDue = 06 Jan

  2. もう一度イベントを開始します。この時点で、var temp = 06 Jan(df_dateはまだ01 Janを示していますが)、df_dateDueは11Janに設定されます。

  3. もう一度イベントを開始します。この時点で、var temp = 11 Jan(df_date = 01 Janであっても)、df_dateDueは16Janに設定されます。

ここで何が欠けていますか?

4

1 に答える 1

2

Flex/AS では、オブジェクトを含む変数は、実際にはメモリ空間へのポインターにすぎません。Flex の Date はオブジェクトであり、ネイティブ型ではありません。この行:

var temp:Date = df_date.selectedDate;

既存の日付オブジェクトへの新しいポインターを作成します。コピーは作成されません。

この行:

temp.date += 5;

dateObject の日付プロパティをインクリメントします。その日付オブジェクトを指すすべての参照が更新されます。objectUtil.copyを使用してみてください

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

ああ、そしてあなたの受け入れ率を上げてください。

于 2011-01-08T23:49:01.860 に答える