2012-06-17 106 views
11

通常這是在日曆事件:fullCalendar jQuery,每個星期一重複?

  { 

       title: 'Test', 

       start: '2012-06-08', 

       end: '2012-06-08', 

       url: 'test/test' 

      }, 

工作正常。雖然我怎樣才能讓每個星期一在日曆上顯示1個事件?或者每個星期二等都取決於您進入的週日/號碼?如果存在的話,那麼參數是什麼?

如果它不存在,我可以以某種方式修改並添加該功能嗎?因此,您可以輸入像repeatEveryWeekDay:2(即星期一)這樣的參數,然後在所有未來的星期一,數據將顯示在那裏。

我試過看http://arshaw.com/fullcalendar/docs/event_data/Event_Object/但找不到任何東西。

+1

未來的讀者:現在有更好的方法來做到這一點(3年後),但這仍然是最好的谷歌結果。看看http://stackoverflow.com/questions/15161654/recurring-events-in-fullcalendar – slicedtoad

回答

33

fullCalendar允許您不通過事件數組,而是傳遞一個函數,例如從服務器下載事件或動態生成這些事件。

文檔中的大多數示例都使用HTTP請求來獲取事件數據。但回調函數仍然足夠靈活,可以按照你想要的方式工作。

請看下面的例子中,我只寫了你:

$(document).ready(function() { 

    var date = new Date(); 
    var d = date.getDate(); 
    var m = date.getMonth(); 
    var y = date.getFullYear(); 

    $('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     editable: true, 
     events: [ 
      // some original fullCalendar examples 
      { 
       title: 'All Day Event', 
       start: new Date(y, m, 1) 
      }, 
      { 
       title: 'Long Event', 
       start: new Date(y, m, d-5), 
       end: new Date(y, m, d-2) 
      }, 
      { 
       id: 999, 
       title: 'Repeating Event', 
       start: new Date(y, m, d-3, 16, 0), 
       allDay: false 
      } 
     ] 
    }); 

    // adding a every monday and wednesday events: 
    $('#calendar').fullCalendar('addEventSource',   
     function(start, end, callback) { 
      // When requested, dynamically generate virtual 
      // events for every monday and wednesday. 
      var events = []; 

      for (loop = start.getTime(); 
       loop <= end.getTime(); 
       loop = loop + (24 * 60 * 60 * 1000)) { 

       var test_date = new Date(loop); 

       if (test_date.is().monday()) { 
        // we're in Moday, create the event 
        events.push({ 
         title: 'I hate mondays - Garfield', 
         start: test_date 
        }); 
       } 

       if (test_date.is().wednesday()) { 
        // we're in Wednesday, create the Wednesday event 
        events.push({ 
         title: 'It\'s the middle of the week!', 
         start: test_date 
        }); 
       } 
      } // for loop 

      // return events generated 
      callback(events); 
     } 
    ); 
}); 

上述功能會自動爲每週一和週三兩個日期之間的事件。日期顯示在startend params。這些參數通過fullCallendar。上述函數生成的事件在第三個參數中通過callback函數返回到fullCallendar

我使用DateJS來測試給定日期是否爲星期一。

UPDATE:如果要混合靜態事件和/或[多個]可重複事件,則可以使用addEventSource

+0

感謝您的回答!你能告訴我如何將靜態事件與實際日期和多個可重複事件混合在一起? – Karem

+1

當然!我更新了示例代碼。我使用'addEventSource'來添加兩個可重複的事件。 –

+0

非常感謝!我非常接近我的目標,我正在混合php和js來獲得我的目標。現在我有一個js變量,可以從1-7,1是星期日和星期六7,我該怎麼做,如果它是2它應該檢查是()。monday()和3是()。tuesday()等等? :-)如果沒有我有相同的代碼重複獲取 – Karem

1

它是事件對象的ID字段,用於確定該事件的可重複性。對於一週中的特定日子,爲所有重複活動使用相同的ID。

+0

嗯,我沒有得到它?例如上面的例子,我希望它每個星期一都重複一次,所以我沒有在一年中的某個日期有事件[]中的元素,而是尋找一個元素,fullcalendar顯示每個未來的星期一,而沒有給出具體的日期。 – Karem

+1

我不認爲FullCalendar默認支持。如果events []對象中沒有數據,那麼它應該如何顯示這些事件?您可以使用像'viewDisplay'這樣的回調以編程方式進行設置,但即使在那裏您也需要創建事件對象。在編輯代碼以添加新的配置參數之後,我認爲您需要通過在events []數組中爲每個事件創建一個對象來實現此目的 - 對於重複事件使用相同的ID。 – ganeshk

+0

爲什麼它應該有相同的ID這是什麼問題呢?我是否需要通過PHP生成當年即將到來的星期一日期,以便每個星期一顯示它們? ? – Karem

1

我發現解決重複事件的最佳方式是爲您的後端語言(我正在使用Django/Python)設置JSON調用。

所以在日曆選項中,我將有:

events: { url: '/event-data', cache: false },

然後在我的後臺我採取的是獲取當前顯示的日曆 「開始」和「端」 URL GET變量發送的參數的優勢。 即:

hxxp://example.com:8000/event-data?start=2014-09-28&end=2014-11-09&_=1413553318353

Get請求會從事件選項發送,我然後生成一個數據庫/源文件,列出重複事件與普通日曆事件一起事件,併發送回剛剛發生的事件的列表在該日期範圍內的JSON列表中。

6

克里斯托弗拉米雷斯的帖子稍微更新。 使用fullCalendar在v2.2.3v2.8.4 momentjs你需要修改的情侶在上面的代碼段線,使其工作:

第一:

function(start, end, callback) {} 

function(start, end, status, callback) {} 

的第三個參數是一個布爾值,第四個是回調函數

Then:

for (loop = start.getTime(); 
    loop <= end.getTime(); 
... 

for (loop = start._d.getTime(); 
    loop <= end._d.getTime(); 

爲傳遞給函數的開始和結束的對象不是他們Date對象並調用.getTime()將結束在「未定義不是一個函數」的錯誤。

而那就是它!這個修正案使它對我有用。

+0

請應用此編輯。 – user3806549

相關問題