Available only in PRO Edition

Создание нескольких планировщиков на странице

Эта функция доступна только в версии Scheduler PRO (Commercial с 6 октября 2021, Enterprise и Ultimate лицензии).

Изначально при работе с библиотекой вы могли заметить, что dhtmlxScheduler — это статический объект, то есть только один экземпляр dhtmlxScheduler может существовать на странице.

Однако в версии PRO это меняется: теперь несколько экземпляров dhtmlxScheduler могут сосуществовать на одной странице. По-прежнему доступен стандартный экземпляр планировщика через глобальный объект scheduler, но вы также можете создавать дополнительные объекты планировщика.

Конфигурация экземпляра Scheduler

Чтобы создать новый экземпляр dhtmlxScheduler, используйте метод Scheduler.getSchedulerInstance():

// Обратите внимание, что 'Scheduler' начинается с заглавной буквы
const scheduler = Scheduler.getSchedulerInstance();

Этот метод может принимать объект конфигурации в качестве аргумента:

const scheduler = Scheduler.getSchedulerInstance({
    plugins: {
        recurring: true,
    },
    container: "scheduler_here",
    config: {
        hour_date: "%h:%i",
        details_on_create: true
    },
    data: {
        events: [
            { id:1, start_date: "2022-04-18 09:00", end_date: "2022-04-18 12:00", 
                text:"English lesson", subject: 'english' },
            { id:2, start_date: "2022-04-20 10:00", end_date: "2022-04-21 16:00", 
                text:"Math exam", subject: 'math' },
            { id:3, start_date: "2022-04-21 10:00", end_date: "2022-04-21 14:00", 
                text:"Science lesson", subject: 'science' },
            { id:4, start_date: "2022-04-23 16:00", end_date: "2022-04-23 17:00", 
                text:"English lesson", subject: 'english' },
            { id:5, start_date: "2022-04-22 09:00", end_date: "2022-04-22 17:00", 
                text:"Usual event" }
        ]
    }
});

Объект конфигурации может включать следующие свойства:

  • container - (string|HTMLElement) HTML-контейнер (или его id), в котором будет отображаться Scheduler. Если не указано, Scheduler будет инициализирован без контейнера.
  • config - (object) настройки конфигурации Scheduler
  • xy - (object) размеры элементов планировщика, см. [ERROR] Page without name scheduler_xy_other.md
  • templates - (object) конфигурация шаблонов
  • events - (object) обработчики событий.
    При указании обработчиков событий для нового экземпляра Scheduler используйте следующий формат:
const scheduler = Scheduler.getSchedulerInstance({
    events: {
        onEventCreated: function(id, e){
            var task = scheduler.getEvent(id);
            task.owner = null;
            return true;
        },
        onClick: function(id, e){
            alert(scheduler.getEvent(id).text);
            return true;
        }
    }
});
  • data - (object|string) данные для загрузки или URL для получения данных
  • plugins - (object) расширения для активации
  • locale - (string|object) двухбуквенный код языка или объект локализации для активации

Обратите внимание, что вызов Scheduler.getSchedulerInstance() без параметров возвращает объект планировщика с настройками по умолчанию. Вам все равно необходимо сконфигурировать, инициализировать и загрузить данные в новый экземпляр как обычно.

Вот простой пример с двумя планировщиками, расположенными друг под другом:

window.addEventListener("DOMContentLoaded", function(){
    var scheduler1  = Scheduler.getSchedulerInstance();
    scheduler1.init('scheduler_here',new Date(2019,5,30),"week");
    scheduler1.load("/data/events");
 
    var scheduler2 = Scheduler.getSchedulerInstance();
    scheduler2.init('scheduler_here_2',new Date(2019,5,30),"month");
    scheduler2.load("/data/events");    
});
 
<body>
    <div id="scheduler_here" style="width:100%; height: 50%;"></div>
    <div id="scheduler_here_2" style="width:100%; height: 50%;"></div>  
</body>

Деструктор экземпляров Scheduler и DataProcessor

Начиная с версии 6.0, dhtmlxScheduler предоставляет destructor для удаления ненужных экземпляров Scheduler.

Вы можете использовать деструктор экземпляра планировщика следующим образом:

var myScheduler = Scheduler.getSchedulerInstance();
 
// уничтожить экземпляр планировщика
myScheduler.destructor();

Деструктор выполняет следующие действия:

  • очищает данные, загруженные в экземпляр планировщика
  • уничтожает dataProcessor, если он был подключён
  • отсоединяет планировщик от DOM
  • удаляет все DOM-события, добавленные через метод scheduler.event()

Использование деструктора с Angular

Вот как можно использовать деструктор для очистки экземпляра планировщика при работе с Angular:

@Component({selector: 'app-scheduler', template: `...`})
class MySchedulerComponent implements OnDestroy {
  ngOnInit() {
     this.$gantt = Scheduler.getSchedulerInstance();
 
     // настройка и инициализация
  }
 
  ngOnDestroy() {
     this.$scheduler.destructor();
     this.$scheduler = null;
  }
}

Отсоединение dataProcessor

Вызов деструктора dataProcessor очищает экземпляр и отсоединяет его от планировщика. Например:

var scheduler = Scheduler.getSchedulerInstance();
var dp = new scheduler.DataProcessor("url");
dp.init(scheduler);
 
// уничтожает dataProcessor и отсоединяет его от планировщика
dp.destructor();

Если вы используете пакет, который не поддерживает несколько экземпляров планировщика (например, GPL или Commercial издания), вызов деструктора планировщика сделает планировщик недоступным до перезагрузки страницы.

Связанные статьи

Наверх