Available only in PRO Edition
Описанная функциональность доступна в версии Webix Pro.
Кроме простых подстрок вы можете вкладывать в строки таблиц другие компоненты. Ниже описано как можно вложить в строку таблицы другую таблицу и форму. По необходимости может быть вложен любой компонент Webix.
Чтобы вложить компонент в Datatable, используйте свойство subview. В случае с таблицей, вам необходимо указать конфигурацию DataTable со всеми необходимыми параметрами как значение этого свойства.
В конфигурации столбца вы должны указать свойство template со значением типа "{common.subrow()} #title#", где:
Вложенная таблица со статическими данными
webix.ui({
view:"datatable",
// настройки вложенной таблицы
subview:{
view:"datatable",
columns:[
{ id:"Outlet", sort:"string", fillspace:true },
{ id:"January" },
{ id:"February" },
{ id:"March" }
],
data:[
{ Outlet:"North", January:100, February:230, March:180 },
{ Outlet:"West", January:70, February:120, March:160 },
],
},
// настройки datatable
columns:[
{ id:"title", header:"Title", sort:"string",
template:"{common.subrow()} #title#", width:220 },
{ id:"year", header:"Year", width:100, sort:"int"},
{ id:"votes", header:"Votes", width:100, sort:"int"}
],
data:[
{ id:1, title:"The Shawshank Redemption", year:1994, votes:678790 },
// больше элементов данных
]
});
Related sample: Sub-Grid in a DataTable
Свойство subview также может быть функцией с параметрами::
Например:
webix.ui({
view:"datatable",
// конфигурация вложенной таблицы
subview: function(obj, target) {
return webix.ui({
template:"some",
autoheight:true
}, target);
},
// конфигурация datatable
columns:[
// конфигурация columns
],
data:[
// элементы данных
]
});
Чтобы наполнить вложенный компонент данными вы можете:
Чтобы загрузить данные, доступные на клиентской стороне в момент создания вложенного компонента, используйте событие onSubViewCreate с двумя параметрами:
В обработчике события примените метод parse и передайте в него свойство элемента данных с данными вложенного компонента:
webix.ui({
view:"datatable",
subview:{
view:"datatable",
columns:[
{ id:"Outlet", sort:"string", fillspace:true },
{ id:"January" },
{ id:"February" },
{ id:"March" }
],
},
on:{
onSubViewCreate:function(view, item){
view.parse(item.outlets);
}
},
columns:[
// столбцы основной таблицы
],
data:[
{ id:1, title:"The Shawshank Redemption", year:1994, votes:678790, outlets:[
{ Outlet:"North", January:100, February:230, March:180 },
{ Outlet:"West", January:70, February:120, March:160 },
]},
// элементы данных
]
});
Related sample: Sub-Grid in a DataTable: Inline Data
Чтобы загрузить данные из внешнего источника, используйте метод load, который принимает путь к нужному файлу или скрипту, возвращающему данные для вложенного компонента.
{
view:"datatable",
subview:{
view:"datatable",
columns:[
// столбцы вложенной таблицы
],
},
on:{
onSubViewCreate:function(view, item){
view.load("../../../15_datatable/16_dyn_loading/data/data_dyn.php?for="
+ item.id);
}
},
columns:[
// master datatable columns
],
data:[
{ id:1, title:"The Shawshank Redemption", year:1994, votes:678790 },
]
}
Related sample: Sub-Grid in a DataTable: Loading Data
Также как и таблицу, вы можете добавить в DataTable форму.
Инициализируйте форму внутри свойства subview и определите конфигурацию ее элементов. Обратите внимание что атрибуты name полей формы должны совпадать со свойствами элементов данных, чтобы обеспечить простой и ясный способ двусторонней привязки.
Чтобы добавить значения во вложенную форму, когда она будет создана, используйте событие onSubViewCreate с двумя параметрами:
Вв обработчике события используйте метод setValues с объектом элемента в качестве параметра.
webix.ui({
view:"datatable",
subview:{
view:"form",
elements:[
{ view:"text", name:"title", label:"Title"},
{ view:"text", name:"year", label:"Year"},
{ cols:[
{ }, { view:"button", value:"Save", click:function(){
var form = this.getFormView();
var values = form.getValues();
var changed = form.getDirtyValues();
// получить основную таблицу
var master = form.getMasterView();
master.updateItem(values.id, changed);
// закрыть вложенную форму
master.closeSub(values.id);
}}
]}
]
},
on:{
onSubViewCreate:function(view, item){
view.setValues(item);
}
},
columns:[
// столбцы datatable
],
data:[
{ id:1, title:"The Shawshank Redemption", year:1994, votes:678790 },
// еще элементы данных
]
});
Related sample: Sub-Form in a DataTable
Вы можете получить основной компонент, вызвав метод getMasterView() для вложенного компонента. Например, давайте рассмотрим пример выше с вложенное в таблицу формой:
webix.ui({
view:"datatable",
subview:{
view:"form",
elements:[
{ view:"text", name:"title", label:"Title"},
{ view:"text", name:"year", label:"Year"},
{ cols:[
{ }, { view:"button", value:"Save", click:function(){
var form = this.getFormView();
var values = form.getValues();
var changed = form.getDirtyValues();
// получить основную таблицу var master = form.getMasterView();
master.updateItem(values.id, changed);
// закрыть подформу
master.closeSub(values.id);
}}
]}
]
},
// добавить значения в подстроку
// конфигурация datatable
});
form.getMasterView()
возвращает компонент-владелец для вложенного компонента (формы). Полученный объект основной таблицы используется для обновления данных таблицы после изменений, совершенных с помощью вложенной формы. Когда форма больше не нужна, используется master.closeSub()
, чтобы ее закрыть.