Режим Только для Чтения

Этот раздел объясняет, как использовать режим только для чтения в двух различных сценариях:

  1. Сделать весь диаграмму Ганта только для чтения
  2. Сделать конкретные задачи только для чтения

Режим Только для Чтения для Всего Диаграммы Ганта

Если вы хотите, чтобы вся диаграмма Ганта была недоступна для редактирования, вы можете установить опцию конфигурации 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"

Опция 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;
});
К началу