我想知道是否有人在拖动调度程序事件时有一个如何进行异步ajax调用的工作示例。我在不同位置(调度程序中的资源)上有一个水平分组,并希望在使用拖放时更新每个位置上的禁用时隙。我已经尝试了一些使用moveStart的方法,但没有一个方法取得任何进展。
这是我正在尝试的。同步功能正在调用我的API控制器,并应该使用新的禁用时隙(slottemplate)更新调度程序,但它永远不会到达函数的' $ ajax' - 它就像它一样被阻止了。
moveStart: function (e) {
console.log(e.event);
selectedActivityId = e.event.activityId;
syncDisabledTimes(e.event.start);
syncDisabledTimes:
var asyncAjaxCalls = [];
for (var i = 0; i < selectedLocations.length; i++) {
asyncAjaxCalls.push(getAsyncCall(selectedLocations[i].locationId, e.event.start));
}
ajaxIsRdy = false;
$.when.apply($, asyncAjaxCalls).done(function () {
ajaxIsRdy = true;
var scheduler = data();
scheduler.view(scheduler.view().name);
});
getAsyncCall:
var asyncCall = $.ajax({
type: "GET",
url: "/api/v1/DisabledTimeTableUnits/",
data: {
'mode': DisabledTimeTableUnitsMode.OnlyDisabledTimes,
'filterOnOutsideTimeTableSet': true,
'filterOnSeasonLimits': true,
'filterOnOpeningHours': true,
'filterOnBookinglock': true,
'filterOnActivity': selectedActivityId === null ? false : true,
'utcTime': true,
'start': moment(_date).startOf('week').isoWeekday(1).toISOString(),
'end': moment(_date).endOf('week').isoWeekday(7).toISOString(),
'locationId': locationId,
'activityId': selectedActivityId
}
}).done(function (disabledTimeUnits) {
for (var i = 0; i < selectedLocations.length; i++) {
if (selectedLocations[i].locationId === locationId) {
selectedLocations[i].disabledTimeSlots = disabledTimeUnits;
}
}
});
return asyncCall;
答案 0 :(得分:0)
MoveStart
会触发一次。拖动事件时,Move
会不断发射。
但是,我建议您在MoveEnd
事件后执行服务器端验证。