Автоматическое перемещение заданий-преемников в 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/грязный

Другие вопросы по тегам