【发布时间】:2020-04-13 06:28:21
【问题描述】:
我尝试在 AJAX 请求上将缓存属性设置为 false,但它完全没有做任何事情。 我正在实现一个 JS 日历,当您单击任何一天时,它会打开一个弹出叠加层,其中还包含另一个日历。第二个日历是通过 ajax 打开的,一切似乎都在第一个调用上进行,它呈现:
然后,在关闭叠加层并单击日历上的另一个日期时,无论我单击多少次,我总是会得到第一个叠加层。
AJAX 调用
$.ajax(
{
type:"POST",
url: "/teachers/teacherDayAgenda/",
data:{
'event_date': dateClicked
},
dataType: 'json',
cache: false,
success: function( eventData ) {
var lessonEvents = [];
var lesson = {};
for (var key in eventData) {
if (key=="eventDefault")
break;
lesson = {};
lesson['title'] = "Lesson with "+eventData[key]['teacher_name'];
lesson['start'] = formatDate(moment(eventData[key]['timeslot_start']).toDate());
lesson['end'] = formatDate(moment(lesson['start']).add(40, 'm').toDate());
lessonEvents.push(lesson);
}
console.log(eventData);
$('#teacher_schedule').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'agendaDay,listWeek'
},
defaultDate: eventData['event0']['click_event_date'],
navLinks: true,
eventLimit: true,
events: lessonEvents
});
$("#teacher_schedule .fc-agendaDay-button").trigger("click");
/*$('td').removeClass('AddEventPopup_open'); */
}
});
观点:
@login_required
def teacherDayAgenda(request):
"""
Ajax request for popup overlay, changes to student schedule, see day agenda of availability of teachers
"""
if request.method == 'POST':
click_event_date = request.POST['event_date']
studentid = request.user.id
default_teacher_id = StudentProfile.objects.has_default_teacher(
studentid)
# default event values
ev = {}
d = {'eventDefault': True, 'click_event_date': click_event_date}
ev['event0'] = d
if default_teacher_id:
ev = {}
events = TeacherProfile.objects.filter(id=default_teacher_id).filter(
student_id__isnull=True).values_list('timeslot_start', 'teacher_id')
i=0
for event in events:
d = {}
d['timeslot_start'] = _datetime_to_string(event[0])
teacherName = User.objects.get_staff_name(event[1])
d['teacher_name'] = teacherName
d['click_event_date'] = click_event_date
ev['event'+str(i)] = d
i += 1
else:
first_teacher_obj = TeacherProfile.objects.get_all_available_teachers()[
0]
first_teacher_id = getattr(first_teacher_obj, 'teacher_id')
events = TeacherAvailability.get_dayagenda(
request, first_teacher_id, click_event_date)
i=0
for event in events:
d = {}
d['timeslot_start'] = _datetime_to_string(event[0])
d['student_id'] = event[1]
teacherName = User.objects.get_staff_name(event[2])
d['teacher_name'] = teacherName
d['click_event_date'] = click_event_date
ev['event'+str(i)] = d
i += 1
return JsonResponse(ev)
else:
return HttpResponse("unsuccesful")
(EDIT1) 第一个日历初始化代码
function initializeCalendar(){
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay,listWeek'
},
defaultDate: today,
navLinks: true,
editable: true,
eventLimit: true,
selectable: true,
events: [{
title: 'Simple static event',
start: '2018-11-16',
description: 'Super cool event'
},
],
customButtons: { addEventButton: { text: 'Add Event', class:'AddEventPopup_open', click: function() {
return true;
}}
},
footer: {left: ' ', center: 'addEventButton', right: ' '
},
});
}
【问题讨论】:
-
我发现这个问题与我的问题非常相关,但是我不太清楚在我的特定情况下该怎么做。 stackoverflow.com/questions/16062899/…
-
能否也添加第一个日历初始化代码
-
刚刚添加了第一个日历的初始化代码。我曾尝试联系MDB,看看他们是否可以提供一些线索,但没有得到他们的任何帮助。该问题似乎与事件处理程序绑定有关,但我仍然没有找到适合我的情况的解决方案。
-
@LawrenceDeSouza 可以添加执行AJAX请求的点击触发代码吗?您将该代码放在哪个事件处理程序上以及如何放置?
-
解决了这个问题。只需要在关闭时销毁覆盖层中的日历插件。我刚刚收到回复,最后是来自制作插件的公司。我讨厌那些带有乱码的黑匣子插件,无法进行更改或查看任何内容。