新しいデータをチェックするために3秒ごとに実行される間隔があります。新しいデータが見つかると、dataChangeイベントがブロードキャストされ、アイテムレンダラーが更新されます。
2回が正確に一致する場合の比較をテストする必要があります...1回のみ。つまり、データが戻ってくるのは会議です。ミーティングは午後3時に始まります。試合が実行されると、会議は青色に変わり、ユーザーは参加できます。
比較した時間が一致する場合にdataChangeイベントをブロードキャストしますが、何度もブロードキャストし続けたくありません。
private static const NOW_OFFSET_TIME:Number = 1000 * 60 * 15;
private function shouldShowNow(start:Date, end:Date):Boolean
{
var now:Date = new Date;
var stime:Number = start.time - NOW_OFFSET_TIME;
var etime:Number = end.time;
return ((now.time >= stime) && (now.time <= etime));
}
上記のコードでは、条件は常にtrueを1回返します
now.time >= stime
...そしてdataChangeイベントは何度も何度も実行されます。
しかし、私の間隔は3秒しか実行されないため、完全一致をトラップしません。ちなみに、間隔を500ミリ秒ごとに切り替えても、トラップされません。
私の他のオプションは何ですか?
有益なご意見をありがとうございます。
更新:これを行うことができます(ただし、1秒ごとにインターバルを実行する必要があります):
private static const NOW_OFFSET_TIME:Number = 1000 * 60 * 15;
private function shouldShowNow(start:Date, end:Date):Boolean
{
var now:Date = new Date;
var match:Boolean;
if( now.hours == start.hours && now.minutes == ( start.minutes - 15 ) && now.seconds == start.seconds ){
match = true;
}else{
match = false;
}
return match;
}
そして、これが完全な間隔のハンドラーです。
/*
We want to compare the current upcomingCalendarList collection
against the collection returned; if they are different, update the UI.
*/
var meetingsData:ArrayCollection = new ArrayCollection();
meetingsData = getArrayCollectionFromXML( event.result.response.participantMeetingList.meeting );
var cachedColl:ArrayCollection = com.fmr.transporter.model.GeneralInfoModel.getInstance().upcomingMeetingList;
var returnedColl:ArrayCollection = meetingsData;
var updates:Boolean = false; // our flag to let us know if there are changes in the meeting list
if( returnedColl != null )
{
// Meetings have been added/removed
if( cachedColl.length != returnedColl.length ){
updates = true;
}
// Look for meeting updates
else
{
for( var i:int=0;i<cachedColl.length;i++ ){
var currMeeting:MeetingVO = cachedColl[i] as MeetingVO;
for( var j:int=0;j<returnedColl.length;j++ ){
var returnedMtg:ObjectProxy = returnedColl[j];
/*
We want to ensure we're comparing the same meeting (meetingID) for
any changes.
*/
if( currMeeting.meetingID == returnedMtg.meetingId )
{
var startTime_GMT:Date = converServerUTCTimeStampToLocalDate( returnedMtg.startTime );
var endTime_GMT:Date = converServerUTCTimeStampToLocalDate( returnedMtg.endTime );
if( ObjectUtil.dateCompare( currMeeting.startTime, startTime_GMT ) != 0 )
updates = true;
else if( ObjectUtil.dateCompare( currMeeting.endTime, endTime_GMT ) != 0 )
updates = true;
else if( currMeeting.meetingName != returnedMtg.meetingName )
updates = true;
else if( this.shouldShowNow( startTime_GMT, endTime_GMT ) )
updates = true;
}
}
}
}
// If there are no updates, leave the cached collections alone.
if( !updates ){
return;
}
}