Валидация

Валидация помогает обеспечить точность данных, вводимых пользователями, и предотвращает сохранение некорректных значений. Например, это может предотвратить назначение двух задач одному сотруднику в одно и то же время.

Обычно валидация данных выполняется с помощью событий из dhtmlxGantt API, которые позволяют перехватывать и проверять корректность вводимых данных:

Валидация на клиенте

Следующие события являются ключевыми и часто используются для валидации данных:

  • onLightboxSave — срабатывает, когда пользователь нажимает кнопку 'Save' в lightbox
  • onBeforeTaskAdd — срабатывает перед добавлением новой задачи в Gantt
  • onBeforeTaskChanged — срабатывает перед обновлением задачи
  • onBeforeLinkAdd — срабатывает перед добавлением новой связи в Gantt
  • onBeforeLinkUpdate — срабатывает перед обновлением связи

Самый простой способ реализовать валидацию — использовать событие onLightboxSave. Это событие возникает при нажатии пользователем кнопки 'Save' в форме. Возвращение true позволяет сохранить изменения, а false отменяет процесс и оставляет lightbox открытым.

Например, чтобы запретить сохранение задачи без назначенного пользователя, вы можете использовать следующий код:

gantt.attachEvent("onLightboxSave", function(id, item){
    if(!item.text){
        gantt.message({type:"error", text:"Enter task description!"});
        return false;
    }
    if(!item.user){
        gantt.message({type:"error", text:"Choose a worker for this task!"});
        return false;
    }
        return true;
});

Related sample:  Validate lightbox values

Валидация на сервере

Одно из ограничений описанного выше подхода заключается в том, что событие не срабатывает, если изменения вносятся через inline-редактирование или перетаскивание задач в Gantt.

Чтобы охватить все изменения — включая редактирование, создание и удаление — используйте объект dataProcessor, в частности его событие onBeforeUpdate. Это событие возникает перед отправкой данных на сервер и после любого изменения в Gantt, независимо от способа его внесения.

gantt.init("gantt_here");
gantt.load("data.php");
 
var dp = new gantt.dataProcessor("data.php");
dp.init(gantt);
 
dp.attachEvent("onBeforeUpdate", function (id, status, data) {
     if (!data.text) {
         gantt.message("The event's text can't be empty!");
         return false;
     }
     return true;
});

Пояснения к параметрам:

  • id — (string) идентификатор задачи.
  • status — ('updated', 'inserted', 'deleted') статус операции над задачей.
  • data — (object) данные, которые будут отправлены.

Имейте в виду: если поле не проходит валидацию, изменения не отправляются на сервер, а остаются на стороне клиента, что позволяет обработать их дополнительно.

К началу