0

我想知道是否有人有一个工作示例,说明如何在拖动调度程序事件时进行异步 ajax 调用。我在不同的位置(调度程序中的资源)有一个水平分组,并且希望在使用拖放时更新每个位置的禁用时间段。我尝试了一些使用 moveStart 的方法,但都没有取得任何进展。

这是我正在尝试的。同步函数正在调用我的 API 控制器,并且应该使用新的禁用时间槽(槽模板)更新调度程序,但它永远不会到达函数的“$ajax”部分(就像它被阻塞一样)。

moveStart: function (e) {
  console.log(e.event);
  selectedActivityId = e.event.activityId;
  syncDisabledTimes(e.event.start);

同步禁用时间:

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);
});

获取异步调用:

    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;
4

1 回答 1

0

MoveStart当你开始拖动时会触发一次。Move将在您拖动事件时连续触发。

但是,我建议您对MoveEnd事件执行服务器端验证。

于 2014-04-26T10:15:05.137 回答