Since 8.4
Редактор входит в пакет виджета Diagram, который доступен под версией Webix Pro. Вы можете приобрести (данные) виджеты как часть любого лицензионного пакета.
Редактор Diagram - это вспомогательный инструмент с удобным интерфейсом, который предназначен для создания стильных и производительных диаграмм. Редактор может взаимодействовать с Diagramm, что делает построение графиков еще более гибким и удобным. С помощью редактора вы можете:
После установки виджета Diagram, вы можете инициализировать редактор Diagram на своей странице следующим образом:
webix.ready(function() {
// применяем кастомный скроллбар (не обязательно)
if (webix.env.mobile) webix.ui.fullScreen();
webix.CustomScroll.init();
webix.ui({
view: "diagram-editor",
data: base_data,
links: base_links
});
});
Related sample: Diagram Editor: Webix View Initialization
webix.ready(function() {
// применяем кастомный скроллбар (не обязательно)
webix.CustomScroll.init();
const app = new diagram.App({
data: base_data,
links: base_links
});
app.render(document.body);
});
Related sample: Diagram Editor: JetApp Initialization
У редактора есть такие свойства конфигурации:
Базовые настройки редактора
webix.ui({
view: "diagram-editor",
data: base_data,
links: base_links,
zoom: 2,
gridStep: 15
});
Related sample: Diagram Editor: Setting Zoom and Grid Step
Чтобы запарсить данные для элементов редактора (блоки, фигуры и связи), необходимо использовать соответствующие свойства data и links. Они работают по такому же принципу, как и для виджета Diagram, но поддерживают только массивы с json объектами.
webix.ui({
view: "diagram-editor",
data: [/* блоки */],
links: [/* связи */],
shapes: [/* фигуры */]
});
Вы также можете загрузить дополнительные фигуры для левой панели с помощью свойства shapes.
Вы также можете посмотреть возможные поля объектов для блоков, связей, и фигур.
С помощью реактивных свойств вы можете отслеживать изменения в глобальном состоянии приложения. У редактора есть несколько реактивных свойств:
С помощью метода getState() можно получить текущее состояние виджета:
webix.ui({
view: "diagram-editor",
id: "editor",
data: base_data,
links: base_links,
gridStep: 20,
zoom: 5
});
const state = $$("editor").getState();
/*
{
gridStep: 20,
zoom: 20,
selected: {
id: 100
}
}
*/
Если выбрать связь, то объект selected будет включать поле link:
{
selected: {
id: 25,
link: true
}
}
Вы можете отслеживать изменения реактивных свойств и привязать к ним собственные обработчики. Для этого, у объекта состояния предусмотрен метод $observe:
webix.ui({
view: "diagram-editor",
on: {
onInit: function() {
const state = this.getState();
// выводит сообщение со значением выбранного элемента
state.$observe("zoom", zoom => webix.message("Current zoom is: " + zoom));
},
}
});
Related sample: Diagram Editor: Listening to State Changes
Diagram и редактор могут взаимодействовать друг с другом через специальные методы для обмена данными.
Чтобы получить все данные виджета Diagram, необходимо вызвать его метод serialize() с параметром all. Чтобы отправить эти данные в редактор, необходимо вызвать его метод setValues(), передав данные в качестве параметра.
const full_data = $$("diagram").serialize(true);
$$("editor").setValues(full_data);
Метод serialize()
вызванный с параметром all
, возвращает полный набор данных, включая следующие:
// full_data
{
data: [
{ id: "start", type: "circle", value: "start", x: 0, y: 80 },
// другие блоки
],
links: [
{ source: "start", target: "search", id: 132 },
// другие связи
],
shapes: [
{
backgroundColor: "#65C0B7", fontColor: "#fff",
group: "block", id: "circle",
lineColor: "#65C0B7", name: "Circle",
svg: "svg_code"
},
// другие фигуры
],
item: {
height: 50, width: 100
},
linkItem: {
arrowSize: 6, arrow: false,
mode: "edges", backgroundColor: "magenta"
},
}
Чтобы получить данные редактора, необходимо вызвать его метод getValues(). Чтобы отправить эти данные в Diagram, необходимо вызвать его метод parse(), передав данные в качестве параметра:
const diagram = $$("diagram");
// очищаем предыдущие данные
diagram.clearAll();
diagram.getLinks().clearAll();
// получаем и парсим новые данные
const data = $$("editor").getValues();
diagram.parse(data);
Если у диаграммы была включена авторасстановка, необходимо отключить её, чтобы расставить блоки по координатам, которые передал редактор:
diagram.config.autoplace = false;
Related sample: Diagram Editor: Live Editing
Наверх