У всех компонентов схожий шаблон редактирования, однако есть некие особенности. Поэтому можно выделить две основные группы:
В конструкторе компонента есть набор свойств, который даёт возможность динамического редактирования. Также программное редактирование имеет место быть.
Что необходимо сделать: - свойству editable укажите значение true; - определите тип editor; - укажите editaction (одинарный/двойной щелчок мыши, или при нажатии на клавишу).
В случае с datatable необходимо добавить свойство editor объекту столбца.
Редакторы описаны здесь.
По умолчанию только у datatable и treetable есть встроенные редакторы.
Свойства Editable и editaction включены в объект конструктора, а свойство editor указывается отдельно для каждого столбца.
webix.ready(function(){
webix.ui({
view:"datatable",
columns:[
{ id:"rank", editor:"text", header:""},
// другие столбцы
],
editable:true,
editaction:"click",
data: small_wide_film_set // данные из внешнего файла
});
Related sample: Opening Multiple Editors
Чтобы обеспечить возможность редактирования других UI компонентов, вам необходимо создать объект прототипа на их основе и расширить их возможностью редактирования. После чего им будет доступно редактирование.
Например, для редактирования списка, создайте прототип с возможностью редактирования и присвойте ему любое имя:
webix.protoUI({
name:"editlist" // или "edittree", "dataview-edit". если вы работаете с ними
}, webix.EditAbility, webix.ui.list);
После этого инициализируйте объект списка. Обратите внимание, что компонент называется "editlist" вместо "list", т.к. это имя нового объекта из примера выше:
webix.ui({
container:"listA",
view:"editlist",
template:"#rank#. #title#",
editable:true,
editor:"text",
editValue:"title",
data:big_film_set
});
Обратите внимание на свойство editValue. Оно задаёт элемент из темплейта, т.к. у каждой записи списка и похожих компонентов есть темплейт с несколькими значениями из исходного источника данных. Более подробно о темплейтах можно почитать здесь.
Редактирование допускает изменения на странице только если не подразумевается автоматическое сохранение данных. Чтобы сохранить данные на сервер, используйте webix.DataProcessor дял редактируемого компонента.
В библиотеке есть набор методов для редактирования.
Обычно вы можете переключить какой-либо элемент в состояние редактирования с помощью метода edit, который принимает ID элемента в качестве параметра:
editlist.edit(7);
Чтобы открыть редактор в ячейке таблицы, вам необходимо указать ID ряды и столбца. Однако мы рекомендуем использовать методы editRow, editColumn и editCell для этих целей. Читайте Datatable API.
datatable.edit({
row:2,
column:"title"
});
Следующие методы также применяются для редактирования:
Читайте о методах редактирования в справочнике API.
Компоненты Webix можно связывать между собой для обеспечения синхронного изменения их данных. Например, вы можете привязать форму к таблице, что позволит редактировать данные таблицы:
$$("form1").bind("datatable1");
Related sample: Editors: Bind Form
Обратите внимание, что атрибуты name совпадают со свойствами (полями) данных для редактирования, однако компонент сам по себе может быть нередактируемым. Вы можете изучить привязку данных более детально.
API для редактирования позволяет прикрепить форму без привязки данных. В отличие от привязки это работает только для
редактируемых компонентов:
rows:[
{
view: "datatable", id:"data", autoConfig: true,
data: grid_data, editable: true
}
]
Форму нужно определить отдельно, например в layout:
rows:[
{
view: "datatable", id:"data", autoConfig: true,
data: grid_data, editable: true
},
{
view:"form", id:"myform",
elements:[
{ view:"text", name:"title" },
{ view:"button", label:"Save", css:"webix_primary" }
]
}
]
или в popup:
webix.ui({
view:"popup",
id:"myform",
body:{
view:"form", elements:[
{ view:"text", name:"title" },
{ view:"button", label:"Save", css:"webix_primary" }
]
}
});
После чего передайте ID формы или ID окна в параметр form компонента данных:
{
view: "datatable", id:"data", autoConfig: true,
data: grid_data, editable: true, form:"myform"
}
Значения формы необходимо собрать и передать в таблицу с помощью getValues / updateItem:
{
view: "form",
id:"myform",
elements: [
{ view: "text", name: "title" },
{
view: "button", label: "Save", css:"webix_primary",
click(id) {
const form = $$(id).getFormView();
var values = form.getValues();
$$("data").updateItem(values.id, values);
}
}
]
}
Related sample: Editing Datatable with a form without binding
Related sample: Editing Datatable with a form in a popup (no binding)