Tôi đã tìm thấy giải pháp bằng cách sử dụng một lịch khác: lịch tuần lễ (https://github.com/themouette/jquery-week-calendar).
Lịch này có tính năng được gọi là Freebusy. Đó là lý do được sử dụng để có phạm vi thời gian bận rộn và miễn phí, nhưng bằng cách thay đổi mã nguồn một chút, tôi có thể thêm màu nền cho phạm vi thời gian. Tôi đã thay đổi phương pháp freeBusyRender như sau:
freeBusyRender: function(freeBusy, $freeBusy, calendar) {
if(freeBusy.free == 't_red') {
$freeBusy.css("backgroundColor", "red");
} else if(freeBusy.free == 't_green') {
$freeBusy.css("backgroundColor", "green");
} else if(freeBusy.free == 't_blue') {
$freeBusy.css("backgroundColor", "blue");
} else if(freeBusy.free == 't_black') {
$freeBusy.css("backgroundColor", "black");
}
$freeBusy.addClass('free-busy-free');
return $freeBusy;
}
Sau đó, tôi có thể khởi tạo lịch như sau:
(function($) {
d = new Date();
d.setDate(d.getDate() - (d.getDay() - 3));
year = d.getFullYear();
month = d.getMonth();
day = d.getDate();
var eventData2 = {
options: {
timeslotsPerHour: 4,
timeslotHeight: 12,
defaultFreeBusy: { free: true }
},
events: [
{ 'id': 1, 'start': new Date(year, month, day, 12), 'end': new Date(year, month, day, 13, 00), 'title': 'Lunch with Sarah'},
{ 'id': 2, 'start': new Date(year, month, day, 14), 'end': new Date(year, month, day, 14, 40), 'title': 'Team Meeting'},
{ 'id': 3, 'start': new Date(year, month, day + 1, 18), 'end': new Date(year, month, day + 1, 18, 40), 'title': 'Meet with Joe'},
{ 'id': 4, 'start': new Date(year, month, day - 1, 8), 'end': new Date(year, month, day - 1, 9, 20), 'title': 'Coffee with Alison'},
{ 'id': 5, 'start': new Date(year, month, day + 1, 14), 'end': new Date(year, month, day + 1, 15, 00), 'title': 'Product showcase'}
],
freebusys: [
{ 'start': new Date(year, month, day - 1, 8), 'end': new Date(year, month, day - 1, 18), 'free': 't_red'},
{ 'start': new Date(year, month, day, 8), 'end': new Date(year, month, day + 0, 18), 'free': 't_green' },
{ 'start': new Date(year, month, day + 1, 8), 'end': new Date(year, month, day + 1, 18), 'free': 't_blue' },
{ 'start': new Date(year, month, day + 2, 14), 'end': new Date(year, month, day + 2, 18), 'free': 't_black'},
{ 'start': new Date(year, month, day + 3, 8), 'end': new Date(year, month, day + 3, 18), 'free': 't_red' }
]
};
$(document).ready(function() {
var $calendar = $('#calendar').weekCalendar({
allowCalEventOverlap: true,
overlapEventsSeparate: true,
totalEventsWidthPercentInOneColumn: 95,
timeslotsPerHour: 4,
scrollToHourMillis: 0,
height: function($calendar) {
return $(window).height() - $('h1').outerHeight(true);
},
eventRender: function(calEvent, $event) {
if (calEvent.end.getTime() < new Date().getTime()) {
$event.css('backgroundColor', '#aaa');
$event.find('.wc-time').css({
backgroundColor: '#999',
border: '1px solid #888'
});
}
},
eventNew: function(calEvent, $event, FreeBusyManager, calendar) {
calEvent.id = calEvent.userId + '_' + calEvent.start.getTime();
},
data: function(start, end, callback) {
callback(eventData2);
},
displayFreeBusys: true,
daysToShow: 7,
switchDisplay: { '1 day': 1, '3 next days': 3, 'work week': 5, 'full week': 7 },
headerSeparator: ' ',
useShortDayNames: true
});
});
})(jQuery);
mà mang lại cho tôi kết quả sau:
Tôi đặt cược này có thể được cải thiện; Tôi nghĩ rằng tôi đã phá vỡ tính năng freeBusy làm điều này, nhưng tôi không cần nó.
chưa có ý tưởng nào tốt hơn; Tôi vừa thêm khoảng thời gian màu đen và lập kế hoạch để nắm bắt các sự kiện khi ai đó tạo hoặc mở rộng khe thời gian và không cho phép họ chồng chéo với các khe màu đen (bị vô hiệu hóa). Nếu tôi tìm thấy một cách tốt hơn, tôi chắc chắn sẽ đăng nó ở đây. – Tom
Về giải pháp hiện tại của bạn. Trong chế độ xem theo tuần khi bạn tắt một khoảng thời gian, nó sẽ bị vô hiệu hóa trong cả tuần. Bạn không thể tắt 6 giờ sáng - 7 giờ sáng ngày 6/8/2012. Đúng ? –
có bạn có thể; Tôi chỉ cần tạo một khoảng thời gian cho một khoảng thời gian nhất định (nếu tôi không nhầm là mức tối thiểu là 15 phút). hơn nữa, nếu có ai đó cố gắng tạo một khoảng thời gian chồng chéo với nó, tôi sẽ không cho phép nó trong trình xử lý sự kiện. Tôi dự định kiểm tra phía máy chủ và đang sử dụng ajax cho việc này. Giống như bạn có thể nhận thấy; dự án này chưa hoàn thành, tbh nó có một số chậm trễ trong tay của tôi, nhưng tôi sẽ sớm thực hiện những gì tôi đang nói với bạn ở đây; Tôi đã làm một số thử nghiệm nghiêm túc như bằng chứng về khái niệm. – Tom