2016-11-04 115 views
0

我想強調某些天,然後能夠捕獲點擊這樣的日子事件(通過AJAX飼料我可以設計我喜歡的獲得):突出顯示特定的日子

Design concept

我有看看events handler,但它顯然是設計來顯示個人事件,我不知道是否可以調整,以做我想做的事情。你能想出一種方法來爲這些日子添加一個類名,然後用CSS來設置它的樣式嗎?

我正在使用FullCalendar v2.3.2(升級不是一個真正的選擇,因爲它已經在網站上使用了)。

+0

你看過創建自定義視圖處理程序嗎? https://fullcalendar.io/docs/views/Custom_Views/它看起來像你可以使用'render'回調,.. – Keith

+0

@Keith謝謝,我在玩這個概念,而我打字,但我沒有真的知道你的意思是什麼'render'回調。 –

+0

嗨,我已經創建了一個片段,..在播放時,我注意到了一個dayRender回調..我認爲這應該做你的後.. – Keith

回答

1

我修改了一個假裝ajax調用,..基本上等待1秒,就好像做了一個ajax調用等,然後重新呈現。

唯一不好的是我如何完成刷新,可能有更好的方法。渲染方法不會重新渲染視圖。

然後,您可以通過從ajax獲得的數據修改其他內容。

var dtoday = moment().dayOfYear(); 
 
var days = []; 
 

 
function pretendAjax() { 
 
    setTimeout(function() { 
 
    days = [dtoday - 2, dtoday + 2]; 
 
    //force calendar refresh, there might be a better 
 
    //way than below, but will do for now 
 
    $('#calendar').fullCalendar('changeView','basicWeek'); 
 
    $('#calendar').fullCalendar('changeView','month'); 
 
    }, 1000); 
 
} 
 

 

 
$('#calendar').fullCalendar({ 
 
    dayRender: function (date, cell) { 
 
    var dofyear = date.dayOfYear(); 
 
    if (days.indexOf(dofyear) >= 0) { 
 
     cell.css({backgroundColor: 'pink'}); 
 
    } 
 
    }, 
 
}); 
 

 
pretendAjax();
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.js"></script> 
 
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.css' /> 
 

 

 
<div id='calendar'></div>

+0

謝謝。看起來很有希望,但顯然在AJAX開始之前渲染了幾天。在'dayRender'我仍然沒有這些信息。 –

+0

您可以調用您的ajax,先獲取數據。然後刷新日曆。 – Keith

+0

我寫了一個基於函數的'events'處理程序來獲取我的數據。我怎樣才能觸發一次刷新,或者,我自己循環的日子? –

1

我撰寫這段醜陋的黑客攻擊,這是對概念主要是一個證明,揭示了我的FullCalendar API的深無知和仍然需要優化的手(例如,我們應該刪除引用到不再存在的細胞)。

我在濫用最初的dayRender執行來將單元格存儲在自定義變量中。然後,我可以根據自己的喜好訪問該變量,並將我選擇的任何jQuery函數應用於鏈接單元格,這是一個很好的舊jQuery對象。

var days = {}; 
 
$('#calendar').fullCalendar({ 
 
    dayRender: function (date, cell) { 
 
     days[date.toISOString()] = cell; 
 
    }, 
 
    events: function(start, end, timezone, callback){ 
 
     // Emulated AJAX response 
 
     var data = [ 
 
      start.add(1, "days").format("YYYY-MM-DD"), 
 
      start.add(2, "days").format("YYYY-MM-DD"), 
 
      start.add(5, "days").format("YYYY-MM-DD") 
 
     ]; 
 
     $.map(data, function(elementOfArray){ 
 
      days[elementOfArray].addClass("has-stuff"); 
 
      callback([]); 
 
     }); 
 
    } 
 
});
.has-stuff { 
 
    background-color: yellow !important; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.js"></script> 
 
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.0.1/fullcalendar.min.css' /> 
 

 

 
<div id='calendar'></div>

優化之外,其門坎需要額外的工作來落實上突出顯示天點擊事件。

學分轉到基思爲最初的片段骨架,錯誤都是我的。

+0

不錯,你知道我確定我嘗試過使用事件回調,但是當我調用回調([])時,它似乎沒有爲我刷新視圖..可能是我用過的另一個事件.. Anyway很高興你把它全部分類。 – Keith