Этот раздел объясняет, как использовать режим только для чтения в двух различных сценариях:
Если вы хотите, чтобы вся диаграмма Ганта была недоступна для редактирования, вы можете установить опцию конфигурации readonly
в true.
gantt.config.readonly = true;
gantt.init("gantt_here");
Имейте в виду, что включение режима только для чтения ограничивает только стандартные действия, которые пользователи могут выполнять через интерфейс. Например, пользователи не смогут открыть lightbox или встроенный редактор, перетаскивать задачи или изменять их размер.
Однако свойство readonly
не ограничивает действия, выполняемые с использованием API. Поэтому, если вы используете API Ганта, вам нужно добавить проверки в ваши callback функции, чтобы увидеть, активен ли режим только для чтения. Вот пример, как предотвратить добавление задач через пользовательскую кнопку:
gantt.config.readonly = true;
gantt.config.columns = [
{ name: "text", label: "Task name", width: "*", tree: true },
{ name: "start_date", label: "Start time", align: "center" },
{ name: "duration", label: "Duration", align: "center" },
{ name: "add", label: "1", width: 44 },
{
name: "add_custom", label: "2", width: 44, template: function (task) {
return "<div class='custom_add' onclick='customAdd(" + task.id + ")';></div>"
}
}
];
function customAdd(parentId) { if (gantt.config.readonly){ return; }}
Если вы хотите, чтобы определенные задачи или связи оставались доступными для редактирования даже в режиме только для чтения, вы можете добавить свойство 'editable' в их объект данных и установить его в true:
gantt.config.readonly = true;
var task = gantt.getTask(id).editable = true;
По умолчанию это поведение связано со свойством 'editable' задачи или связи. При необходимости вы можете использовать опцию конфигурации editable_property
, чтобы изменить имя свойства:
gantt.config.editable_property = "property_name";
Чтобы сделать отдельные задачи или связи недоступными для редактирования, вы можете добавить свойство 'readonly' в их объект данных и установить его в true:
gantt.getTask(id).readonly = true;
gantt.getLink(id).readonly = true;
По умолчанию Gantt проверяет, имеет ли задача или связь это свойство, установленное в ненулевое значение. Если да, то задача или связь становятся только для чтения; в противном случае они остаются доступными для редактирования.
Когда задача или связь устанавливаются в режим только для чтения, они не будут реагировать на клики, двойные клики, перетаскивание или любую форму редактирования.
Если вы все же хотите отображать lightbox для задач только для чтения, вы можете вызвать его вручную, используя gantt.showLightbox(id):
gantt.attachEvent("onTaskDblClick", function(id,e){
gantt.showLightbox(id)
return true;
});
По умолчанию поведение только для чтения связано со свойством 'readonly'. При необходимости вы можете изменить это свойство, используя опцию конфигурации readonly_property
:
gantt.config.readonly_property = "property_name";
Опция editable_property
относится к свойству в объекте данных задачи, а не к секции lightbox или колонке в гриде:
{
tasks:[
{id:1, text:"Project #2", start_date:"01-04-2020", duration:18,order:10,
progress:0.4, parent:0, editable:false},
{id:2, text:"Task #1", start_date:"02-04-2020", duration:8, order:10,
progress:0.6, parent:1, editable:true},
{id:3, text:"Task #2", start_date:"11-04-2020", duration:8, order:20,
progress:0.6, parent:1, editable:true}
],
links:[...]
}
Если вы хотите, чтобы это свойство было настраиваемым из lightbox, установите editable_property
, чтобы оно соответствовало свойству, сопоставленному с контролом:
gantt.config.lightbox.sections = [
{
name:"description",
height:38,
map_to:"some_property",
type:"textarea",
focus:true
},
....
]
gantt.config.editable_property = "some_property";
Если вам нужно сделать события доступными для редактирования или только для чтения на основе нескольких условий, вот несколько подходов:
onBeforeLightbox
или onBeforeTaskDrag
.editable_property
всякий раз, когда задачи загружаются, создаются или обновляются, используя такие события, как onTaskLoading
, onTaskCreated
или onAfterTaskUpdate
:gantt.attachEvent("onTaskLoading", function(task){
task.editable = task.has_owner && task.editable && task.text;
return true;
});
К началу