Валидация — это способ управления данными, вводимыми пользователями, чтобы убедиться, что сохраняются только корректные значения. Например, она может помочь предотвратить назначение двух задач одному и тому же человеку одновременно.
Для проверки пользовательского ввода можно использовать события, предоставляемые dhtmlxGantt API. Эти события позволяют перехватывать и обрабатывать данные на основе их корректности.
Вот некоторые ключевые события, часто используемые для клиентской валидации:
Простой способ обработки валидации — использование события 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;
});
В этом примере:
Если поле не проходит валидацию, изменения не будут отправлены на сервер. Вместо этого они остаются на клиентской стороне, что позволяет при необходимости дальнейшую обработку.
К началу