1

コードに奇妙なバグがあり、立ち往生しています。実際、私はあまり明確ではないレガシーコードを変更し、この問題が発生しました。ここでライブの例を fiddle で見ることができます。

基本的に私はカレンダーを持っており、正しい日数にまたがるように複数日のイベントを拡張する必要があります。1 つのケースを除いて、すべてが機能します。月の最初の日が週の最初の日である場合です。その場合、複数日にまたがるイベントは、最初の 1 週間だけ 1 日短くなります。回避策を使用してこれを解決しました

// There is a bug that happens only when the first day of the 
// month is the first day of the week. In that case events that start on the first of the month
// or multy day events that span from the previous month end up being a day too short in the 
// first week. So for example an event that lasted the full month was only six days in the first week.
// This workaround works for me, couldn't understand what's wrong.
// if (startDay === 1 && daysFirstWeek === 7) {
   // days += 1;
// }

行のコメントを外すとすべてが機能しますが、明らかにこれは解決策ではありません。

この問題については、新しい視点が必要です。おそらく、全体の根底にある概念が間違っているので、最初からやり直すべきですが、解決策が見つからないとイライラします。

4

1 に答える 1

1

更新しました

わかりました、今度はわかりました。あなたのチェックは他の条件では間違っています:

        if (cellNum !== 0) {
            // Extend initial event bar to the end of first (!) week.
            if (curLine === 0) {
                days++;
            }
        } else if (day > startDay && daysLeft !== 0) {    // WRONG CHECK HERE!

day > startDay は day >= startDay である必要があります。その後、すべて正常に動作します。

これは、ループの初期チェックが原因です。

if (day >= startDay && day <= endDay) {

後のチェックが day > startDay であるため、days に付随する最初のセルを追加できず、curLine が時間どおりにインクリメントされません。次の行の最初のセルは、本来よりも 1 少ない curLine で処理されてしまいます。curLine と cellNum をコンソール ログに記録すると、これらがこのようになり、本来あるべき場所に並んでいないことがわかります。修正により、処理は最初のセルの内部条件に入ります。

于 2012-08-30T21:28:09.680 に答える