Webix Scheduler ожидает общий URL для загрузки и сохранения событий и календарей:
view: "scheduler", url: "remote/data"
Более подробную информацию о роутах и параметрах читайте в этой статье.
Если у вас нет бэкенд сервера или вам необходима нестандартная логика работы, вы можете переписать её.
Scheduler ожидает JSON данные, где элементы массива (объекты) содержат следующие поля:
recurring (string) - формат iCal. Scheduler поддерживает следующие параметры:
1) daily (FREQ=DAYLY)
"FREQ=DAYLY" // ежедневно
"FREQ=DAYLY;INTERVAL=3" // каждые три дня
2) weekly (FREQ=WEEKLY)
"FREQ=WEEKLY;BYDAY=TU" // каждую неделю во вторник
"FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,FR" // каждые две недели по вторникам и пятницам
3) monthly (FREQ=MONTHLY)
"FREQ=MONTHLY;INTERVAL=2;BYDAY=MO;BYSETPOS=3"
// каждые два месяца в третий понедельник
"FREQ=MONTHLY;BYMONTHDAY=25" // каждый месяц 25-го числа
4) yearly (FREQ=YEARLY)
"FREQ=YEARLY;INTERVAL=5;BYDAY=TH;BYSETPOS=2;BYMONTH=7"
// раз в пять лет во второй четверг июля
"FREQ=YEARLY;INTERVAL=3;BYMONTH=12;BYMONTHDAY=31"
// раз в три года 31 декабря
"FREQ=YEARLY;INTERVAL=4;BYYEARDAY=100"
// раз в четыре года в 100-й день года
5) hourly, minutely, secondly (FREQ=HOURLY, FREQ=MINUTELY, FREQ=SECONDLY)
"FREQ=HOURLY;INTERVAL=1" // каждый час
"FREQ=MINUTELY;INTERVAL=5" // каждые 5 минут
"FREQ=SECONDLY;INTERVAL=300" // каждые 300 секунд
Эти опции также доступны через пользовательский интерфейс.
Обратите внимание, что минимальный интервал, поддерживаемый интерфейсом,ограничен 5-ю минутами/300-ми секундами
В то время как hourly - одна из стандартных опций для повторяющихся событий:
опции minutely и secondly используются для установки пользовательских опций:
Вы можете создавать события, которые повторяются бесконечно или ограничивать количество их повторений. Чтобы задать количество повторений, используйте COUNT:
"FREQ=DAYLY;INTERVAL=2;COUNT=7" // каждые два дня в течение семи раз
Чтобы установить дату окончания, используйте UNTIL:
"FREQ=MONTHLY;INTERVAL=1;UNTIL=20210928T000000Z;BYMONTHDAY=28"
//ежемесячно 28 числа до 28 сентября 2021 года
Если ничего не задано, то событие будет повторяться вечно.
Подробнее о правилах повторения в документации iCalendar.
JSON example
{
"start_date": "2018-06-21 00:00:00",
"end_date": "2018-07-05 00:00:00",
"id": 17,
"all_day": 1,
"text": "Wimbledon",
"section": "2",
"units": "1,2",
"details": "Wimbledon\nJune 21, 2014 - July 5, 2014",
"color": "#CF89D5",
"recurring": "FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=1",
"calendar": 2
}
JSON пример
{
text: "Personal",
color: "#997CEB",
active: 1,
id: "1"
}
Категории загружаются, когда Scheduler переходит в режим units.
Секции загружаются, когда Scheduler переходит в режим timeline.
JSON пример
{
id: "1"
text: "Section 1",
}
У Scheduler есть следующие сервисы для работы с данными:
1. Local Data
const local = $$("scheduler").getService("local");
// получаем коллекцию калндарей
local.calendars().then(calendars => {
// ваш код
});
2. Operations
const ops = $$("scheduler").getService("operations");
ops.addCalendar(data); // adds calendar
3. Backend
const back = $$("scheduler").getService("backend");
back.events().then(data => console.log(data));
Смотрите исходную папку models, чтобы познакомиться с сигнатурами методов.
Все события хранятся в DataCollection. Чтобы получить коллекцию, вызовите метод events у сервиса Local. Метод принимает 2 параметра:
// получаем коллекцию событий
$$("scheduler").getService("local").events()
.then(events => {
// ваш код
});
С помощью сериализации можно получить массив событий:
const local = $$("scheduler").getService("local");
local.events().then(events => {
const evs = events.serialize(); // получаем массив событий
/*[
{
calendar: 2,
color: "#91E4A6",
details: " Leipzig, GER",
end_date: new Date(),
id: "1",
section: "2",
units: "2",
start_date: new Date(),
text: " Zentralstadion - Leipzig"
},
// другие событий
]
*/
});
Чтобы получить события за определённый промежуток времени, вызовите метод сервиса Local - getEvents(). Метод принимает 2 параметра:
let start = webix.Date.monthStart(new Date(2018, 4, 21));
let end = webix.Date.add(start, 1, "month", true);
const events = $$("scheduler").getService("local").getEvents(start, end);
Метод возвращает промис с массивом событий между указанными датами (включительно):
[
{
calendar: 1,
color: "#CF89D5",
details: " Milan, Italy",
end_date: new Date(),
id: "16",
section: "1",
units: "2",
start_date: new Date(),
text: " Comunale Giuseppe Meazza - San Siro",
},
// другие объекты событий
]
Чтобы получить коллекцию всех календарей, вызовите метод calendars сервиса Local. Метод принимает 2 параметра:
// получаем коллекцию календарей
$$("scheduler").getService("local").calendars()
.then(calendars => {
// ваш код
});
С помощью сериализации можно получить массив календарей:
const local = $$("scheduler").getService("local");
local.calendars().then(calendars => {
const cals = calendars.serialize(); // получаем массив календарей
/*
[
{text: "Personal", color: "#997CEB", active: 1, id: "1"},
// другие календари
]
*/
});
Коллекция доступна, только если включено свойство timeline.
Чтобы получить коллекцию секций, вызовите метод sections сервиса Local. Метод принимает 2 параметра:
// получаем коллекцию секций
$$("scheduler").getService("local").sections()
.then(sections => {
// ваш код
});
С помощью сериализации можно получить массив секций:
const local = $$("scheduler").getService("local");
local.sections().then(sections => {
const sectionsArray = sections.serialize(); // получаем массив секций
/*
[
{text: "Section 1", id: "1"},
// другие секции
]
*/
});
Коллекция доступна, только если включено свойство units.
Чтобы получить коллекцию секций, вызовите метод units сервиса Local. Метод принимает 2 параметра:
// получаем коллекцию категорий
$$("scheduler").getService("local").units()
.then(units => {
// ваш код
});
С помощью сериализации можно получить массив категорий:
const local = $$("scheduler").getService("local");
local.units().then(units => {
const unitsArray = units.serialize(); // получаем массив секций
/*
[
{value: "Sports", id: "1"},
// другие категории
]
*/
});
Вы можете вызвать clearAll, чтобы очистить все внутренние коллекции Scheduler (события, календари и т.д.).
$$("$scheduler").clearAll();
Чтобы перезагрузить данные после вызова clearAll, перерисуйте приложение. Обновление вызовет стандартную последовательность загрузки данных (методы сервисов Local и Backend).
$$("$scheduler").$app.refresh();
Related sample: Scheduler: Data Operations
Наверх