Создание нескольких планировщиков на странице
Эта функция доступна только в версии 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) размеры элементов планировщика, см.
- 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"></div>
<div id="scheduler_here_2"></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 издания), вызов деструктора планировщика сделает планировщик недоступным до перезагрузки страницы.