Валидация

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

Для проверки пользовательского ввода можно использовать события, предоставляемые dhtmlxGantt API. Эти события позволяют перехватывать и обрабатывать данные на основе их корректности.

Клиентская валидация

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

  • onLightboxSave - срабатывает при нажатии кнопки 'Сохранить' в лайтбоксе
  • onBeforeTaskAdd - срабатывает перед добавлением новой задачи в диаграмму Ганта
  • onBeforeTaskChanged - срабатывает перед обновлением задачи
  • onBeforeLinkAdd - срабатывает перед добавлением новой связи в диаграмму Ганта
  • onBeforeLinkUpdate - срабатывает перед обновлением связи

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

Вот пример, который предотвращает сохранение задачи, если не предоставлено описание или назначенный пользователь:

gantt.attachEvent("onLightboxSave", function(id, item){
    if(!item.text){
        gantt.message({type:"error", text:"Введите описание задачи!"});
        return false;
    }
    if(!item.user){
        gantt.message({type:"error", text:"Выберите исполнителя для этой задачи!"});
        return false;
    }
        return true;
});

Related sample:  Validate lightbox values

Серверная валидация

У подхода выше есть ограничение — он не будет работать, если изменения вносятся с помощью встроенного редактора или перемещением задач непосредственно на диаграмме Ганта.

Чтобы обрабатывать все изменения, включая редактирование, создание и удаление задач, можно использовать объект dataProcessor. В частности, можно использовать его событие onBeforeUpdate, которое срабатывает перед отправкой данных на сервер и после любого изменения в диаграмме Ганта (не ограничивается лайтбоксом).

Вот пример:

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("Текст события не может быть пустым!");
         return false;
     }
     return true;
});

В этом примере:

  • id - (string) ID задачи.
  • status - ('updated', 'inserted', 'deleted') статус операции задачи.
  • data - (object) данные, отправляемые на сервер.

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

К началу