В этой статье описывается, как синхронизировать несколько планировщиков с помощью объекта dhtmlXDataStore. Планировщики получают данные из этого общего хранилища, поэтому любое изменение события в одном планировщике автоматически обновляется в других.
Обратите внимание: dhtmlxDataStore входит в пакет dhtmlxSuite5 и не включён в dhtmlxScheduler по умолчанию. Однако, даже если у вас нет лицензии на dhtmlxSuite, вы всё равно можете бесплатно использовать dhtmlxDataStore с dhtmlxScheduler. Следуйте инструкциям ниже для настройки в вашем приложении.
<script src="dhtmlxscheduler.js"></script>
<script src="datastore/dhtmlxCommon/codebase/dhtmlxcommon.js"></script>
<script src="datastore/datastore.js"></script>
Типичный способ синхронизации планировщиков через DataStore выглядит так:
function init() {
var data = new dhtmlXDataStore({
url:"data/data.json",
scheme:{
$init:function(obj){
if (typeof obj.start_date == "string"){
obj.start_date = scheduler.templates.parse_date(obj.start_date);
obj.end_date = scheduler.templates.parse_date(obj.end_date);
}
}
}
});
scheduler1 = Scheduler.getSchedulerInstance();
scheduler1.init('scheduler_here',new Date(2019,05,12),"week");
scheduler1.sync(data, { copy:true });
scheduler2 = Scheduler.getSchedulerInstance();
scheduler2.init('scheduler_here_too',new Date(2019,05,12),"month");
scheduler2.sync(data, { copy:true });
}
Кратко о том, что происходит в приведённом выше коде:
Метод sync связывает планировщик с DataStore и принимает два параметра:
Второй параметр заслуживает особого внимания, так как он специфичен для dhtmlxScheduler и не описан в основной документации dhtmlXDataStore.
Эта опция инструктирует DataStore создавать отдельную копию данных для каждого планировщика. Таким образом, в приведённом примере DataStore, scheduler1 и scheduler2 имеют свои собственные наборы данных. Но вам не нужно заботиться о ручной синхронизации этих наборов — всё происходит автоматически. Когда вы что-то изменяете в одном планировщике, обновление отправляется в DataStore, который затем обновляет набор данных другого планировщика.
Может возникнуть вопрос, зачем нужен этот дополнительный шаг, если результат кажется одинаковым.
Вот почему: помимо основных свойств события, каждое событие содержит множество внутренних свойств, назначаемых Scheduler во время выполнения. Эти внутренние свойства могут изменяться в зависимости от выбранного представления. Например, если одно и то же событие открыто в обоих планировщиках, но отображается в разных представлениях, значения внутренних свойств могут рассинхронизироваться. Это несоответствие может привести к некорректному отображению события.
В таком случае использование параметра ({copy:true}) помогает избежать подобных проблем, обеспечивая корректную обработку данных. Кроме того, дублирование данных может быть полезно и в других ситуациях.
Например, если у вас на странице два планировщика, отображающих одни и те же события, но в разных часовых поясах (например, Москва и Лондон), совместное использование одного набора данных будет неудобно. Наличие отдельных наборов данных для каждого планировщика позволяет корректно отображать события в обоих поясах.
Related sample: Integration with dhtmlXDataStore
Наверх