全日历 |在列表视图中更改 fc-event-dot 的颜色
Fullcalendar | Change color of fc-event-dot at list view
我正在使用完整日历,我正在将 defaultView 设置为 listMonth,如下所示:
var events= [... this.events,
{
"title": "a title"
"start": "a date",
type: "X"
},
{
"title": "a title 2"
"start": "a date 2",
type: "Y"
}
];
$("#calendar").fullCalendar({
...
defaultView: "listMonth",
eventRender: function (event, element) {
if(event.type=="X")
$(".fc-event-dot").css('background-color', '#2a7568 !important'); //does nothing
if(event.type=="Y")
$(".fc-event-dot").css('background-color', '#fff!important'); //does nothing
}
});
如何更改圆点的颜色?
我找到了解决方案。
不知道这个方法对不对,但确实有效。
它是这样的:
eventRender: function (event, element) {
if (event.type == "planted") {
element[0].cells[1].children[0].style.background = "#08b394" //works!
//$(".fc-event-dot").addClass("#08b394 !important") //does not work
} else {
element[0].cells[1].children[0].style.background = "#2a7568" //works!
//$(".fc-event-dot").css('background-color', '#2a7568 !important') //does not work
}
}
$(".fc-event-dot").css(....
不会像您预期的那样工作,即使它在工作,因为 $(".fc-event-dot")
目标 all 点(即所有class) 的元素,而不仅仅是呈现特定事件的元素。而且它不起作用,因为这些元素尚未呈现。每个点仅存在于提供给 eventRender 回调的 element
对象中。 FullCalendar 尚未将事件及其构成元素添加到 DOM - 这仅在 eventRender 调用完成时发生,以便您有机会在日历上绘制之前修改外观。
因此您必须通过在 element
中找到它来更新该项目。幸运的是 jQuery 提供了一种简单的方法,使用 .find()
函数:
eventRender: function(event, element) {
if (event.type == "X")
element.find(".fc-event-dot").css('background-color','#08b394');
if (event.type == "Y")
element.find(".fc-event-dot").css('background-color','#2a7568');
},
工作演示:https://codepen.io/ADyson82/pen/MWwXbVK?editable=true&editors=001
我在将 eventClick 与全日历组件(使用 Vue)结合使用时发现了同样的问题:
eventClick: function(info) {
if(info.el.style.borderColor == 'green') {
info.el.children[0]["style"].borderColor = "red"; //change the dot
info.el.style.borderColor = 'red'; //change the border-color of the date
}
else{
info.el.children[0]["style"].borderColor = "green";
info.el.style.borderColor = 'green';
}
},
这个函数放在组件的calendarOptions里面。
希望这对某人有用:)
我正在使用完整日历,我正在将 defaultView 设置为 listMonth,如下所示:
var events= [... this.events,
{
"title": "a title"
"start": "a date",
type: "X"
},
{
"title": "a title 2"
"start": "a date 2",
type: "Y"
}
];
$("#calendar").fullCalendar({
...
defaultView: "listMonth",
eventRender: function (event, element) {
if(event.type=="X")
$(".fc-event-dot").css('background-color', '#2a7568 !important'); //does nothing
if(event.type=="Y")
$(".fc-event-dot").css('background-color', '#fff!important'); //does nothing
}
});
如何更改圆点的颜色?
我找到了解决方案。
不知道这个方法对不对,但确实有效。
它是这样的:
eventRender: function (event, element) {
if (event.type == "planted") {
element[0].cells[1].children[0].style.background = "#08b394" //works!
//$(".fc-event-dot").addClass("#08b394 !important") //does not work
} else {
element[0].cells[1].children[0].style.background = "#2a7568" //works!
//$(".fc-event-dot").css('background-color', '#2a7568 !important') //does not work
}
}
$(".fc-event-dot").css(....
不会像您预期的那样工作,即使它在工作,因为 $(".fc-event-dot")
目标 all 点(即所有class) 的元素,而不仅仅是呈现特定事件的元素。而且它不起作用,因为这些元素尚未呈现。每个点仅存在于提供给 eventRender 回调的 element
对象中。 FullCalendar 尚未将事件及其构成元素添加到 DOM - 这仅在 eventRender 调用完成时发生,以便您有机会在日历上绘制之前修改外观。
因此您必须通过在 element
中找到它来更新该项目。幸运的是 jQuery 提供了一种简单的方法,使用 .find()
函数:
eventRender: function(event, element) {
if (event.type == "X")
element.find(".fc-event-dot").css('background-color','#08b394');
if (event.type == "Y")
element.find(".fc-event-dot").css('background-color','#2a7568');
},
工作演示:https://codepen.io/ADyson82/pen/MWwXbVK?editable=true&editors=001
我在将 eventClick 与全日历组件(使用 Vue)结合使用时发现了同样的问题:
eventClick: function(info) {
if(info.el.style.borderColor == 'green') {
info.el.children[0]["style"].borderColor = "red"; //change the dot
info.el.style.borderColor = 'red'; //change the border-color of the date
}
else{
info.el.children[0]["style"].borderColor = "green";
info.el.style.borderColor = 'green';
}
},
这个函数放在组件的calendarOptions里面。 希望这对某人有用:)