0

新しいデータをチェックするために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;
                            }
                        }
4

1 に答える 1

1

MeetingVOクラスにプロパティを追加して、既に表示したかどうかを追跡するのが最適なようです。何かのようなものpublic var hasBeenShown:Boolean = false

次に、shouldShowNowを呼び出す場所が他の場合は、次のように更新します。

else if (!currMeeting.hasBeenShown && this.shouldShowNow(startTime_GMT, endTime_GMT, currMeeting))

次に、shouldshowNow関数で、次のように更新します。

private function shouldShowNow(start:Date, end:Date, meeting:MeetingVO):Boolean
{
    var now:Date = new Date;

    var stime:Number = start.time - NOW_OFFSET_TIME;
    var etime:Number = end.time;

    if((now.time >= stime) && (now.time <= etime)){
        meeting.hasBeenShown = true;
        return true;
    }

    return false;
}
于 2012-08-16T20:08:40.457 に答える