Вы можете заменить стандартный lightbox в Gantt на полностью кастомизированную версию. Для этого есть два основных подхода:
1) Переопределение метода gantt.showLightbox
:
gantt.showLightbox = function(id){
// Здесь код пользовательской формы
}
id
- (строка/число) - представляет собой ID задачи.Для помощи в реализации пользовательского lightbox вы также можете использовать метод gantt.hideLightbox
.
Начните с создания HTML-контейнера, например, "my-form," который будет содержать пользовательский lightbox:
<div id="my-form">
<label for="description">Текст задачи
<input type="text" name="description" value="" >
</label>
<br>
<input type="button" name="save" value="Сохранить">
<input type="button" name="close" value="Закрыть">
<input type="button" name="delete" value="Удалить">
</div>
Теперь вы можете настроить пользовательский lightbox, используя следующую настройку:
var taskId = null;
gantt.showLightbox = function(id) {
taskId = id;
var task = gantt.getTask(id);
var form = getForm();
var input = form.querySelector("[name='description']");
input.focus();
input.value = task.text;
form.style.display = "block";
form.querySelector("[name='save']").onclick = save;
form.querySelector("[name='close']").onclick = cancel;
form.querySelector("[name='delete']").onclick = remove;
};
gantt.hideLightbox = function(){
getForm().style.display = "";
taskId = null;
}
function getForm() {
return document.getElementById("my-form");
};
function save() {
var task = gantt.getTask(taskId);
task.text = getForm().querySelector("[name='description']").value;
if(task.$new){
delete task.$new;
gantt.addTask(task,task.parent);
}else{
gantt.updateTask(task.id);
}
gantt.hideLightbox();
}
function cancel() {
var task = gantt.getTask(taskId);
if(task.$new)
gantt.deleteTask(task.id);
gantt.hideLightbox();
}
function remove() {
gantt.deleteTask(taskId);
gantt.hideLightbox();
}
2) Использование события onBeforeLightbox
. Этот метод включает в себя:
Вот пример:
gantt.attachEvent("onBeforeLightbox", function(id) {
var task = gantt.getTask(id);
if(task.$new){
dhtmlx.confirm({
text:"Создать задачу?",
callback: function(res){
if(res){
// Применить значения
delete task.$new;
gantt.addTask(task);
}else{
gantt.deleteTask(task.id);
}
}
});
return false;
}
return true;
});
Когда пользователь взаимодействует с пользовательской формой, вам нужно будет вручную извлечь значения формы и обновить соответствующую задачу с помощью таких API, как gantt.addTask
, gantt.updateTask
и gantt.deleteTask
.
Для новых задач (созданных нажатием кнопки 'плюс') объект задачи будет включать свойство $new
. Если пользователь отменяет создание, задача должна быть удалена.
Вы можете управлять действиями по закрытию lightbox, как показано ниже. Тип действия — 'save', 'cancel', или 'delete' — передается в качестве параметра action
:
switch(action){
case "save":
task.text = ''; // Применить значения формы
// Добавить новую задачу или обновить существующую
if(task.$new){
delete task.$new;
gantt.addTask(task,task.parent)
}else{
gantt.updateTask(id);
}
break;
case "cancel":
// Если отмена новой задачи, удалить её; иначе ничего не делать
if(task.$new)
gantt.deleteTask(id);
break;
case "delete":
gantt.deleteTask(id);
break;
}
К началу