Автоматическое перемещение заданий-преемников в Kendo UI Gantt
Я пытаюсь обновить задачи диаграммы Telerik Gantt автоматически
Допустим, если я перейду к задаче на 1 день вперед, то она должна автоматически переместить свои последующие задачи на 1 день вперед.
Эта функция ниже автоматически перемещает все последующие задачи, но проблема в том, что как только я обновляю страницу, мои изменения теряются, и сохраняется только та задача, которую я переместил. не сохраняйте мои изменения, сделанные с помощью tasksDataSource.update
Полный код здесь http://dojo.telerik.com/EYOnu
function onSave(e) {
//reinitialize array
updatedSuccessorsIds = new Array();
var gantt = e.sender;
var newStartDate = e.values.end;
var oldStartDate = e.task.end;
var diffMs = newStartDate - oldStartDate; // milliseconds between now & old
var diffMins = Math.round(diffMs / 60000);
var currentTaskId = e.task.id.toString();
var dependencies = dependenciesDataSource.successors(currentTaskId);
$.each(dependencies, function (key, depend) {
updateSuccessor(depend.successorId, diffMins);
});
//kendoConsole.log("Task saved :: " + e.task.title);
}
function onDataBound() {
//kendoConsole.log("Gantt data bound");
}
function onDataBinding() {
//kendoConsole.log("Gantt data binding");
}
function onNavigate(e) {
//kendoConsole.log(kendo.format("navigate:: view:{0};", e.view));
}
function onMoveStart(e) {
//kendoConsole.log("moveStart");
}
function onMove(e) {
//kendoConsole.log("move");
}
function onMoveEnd(e) {
}
function updateSuccessor(successortaskId, diffMins) {
var successortask = tasksDataSource.get(successortaskId);
if (successortask.summary)
return true;//this is parent so ignore its node
var successortaskStartDate = successortask.start;
successortaskStartDate.setMinutes(successortaskStartDate.getMinutes() + diffMins);
var successortaskEndDate = successortask.end;
successortaskEndDate.setMinutes(successortaskEndDate.getMinutes() + diffMins);
tasksDataSource.update(successortask,
{
start: successortaskStartDate,
end: successortaskEndDate
});
//put updated successortask in array so we can use this array to find parent node to update
updatedSuccessorsIds.push(successortaskId);
var dependencies = dependenciesDataSource.successors(successortaskId);
$.each(dependencies, function (key, depend) {
updateSuccessor(depend.successorId, diffMins);
});
}
2 ответа
Вам необходимо использовать событие moveEnd, поскольку оно однозначно определяет перемещаемую задачу (вам также может понадобиться использовать событие resizeEnd для случая, когда продолжительность задачи изменяется). Если вы измените задачу, которая была фактически перемещена, вам нужно будет вызвать e.preventDefault(), чтобы предотвратить вызов метода save, который переопределит ваши изменения, используя значения e.start и e.end.
Согласитесь с Китом, что события moveEnd и resizeEnd следует использовать как события, запускающие изменение последующих задач. Однако это все еще не сохраняло изменения в задачах-преемниках для меня. Чтобы сохранить последующие задачи, я добавил дополнительное «грязное» свойство к обновлению источника данных, как показано в исправленном примере ниже, что привело к тому, что элемент управления запускает сохранение.
Согласно документации Kendo, грязный флаг указывает, изменена ли модель.https://docs.telerik.com/kendo-ui/api/javascript/data/model/fields/грязный