Перейти к основному содержимому

Валидация

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

Обычно валидация данных выполняется с помощью событий из 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;
});

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) данные, которые будут отправлены.

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