Nesting Jet Views into Webix Widgets
Last updated
// views/top.js
import {JetView} from "webix-jet";
import {ChildView1} from "views/childview1";
import {ChildView2} from "views/childview2";
export default class TopView extends JetView {
config(){
return {
rows: [
{ view:"segmented", multiview:true, options:[
"Dashboard", "Meta Info"
]},
{ view:"multiview", cells:[
{ $subview:ChildView1, id:"Dashboard" }, //load views/childview1.js
{ $subview:ChildView2, id:"Meta Info" } //load views/childview2.js
]}
]
};
}
}// views/top.js
import {JetView} from "webix-jet";
import ChildView1 from "views/childview1";
import ChildView2 from "views/childview2";
export default class TopView extends JetView {
config(){
return {
rows: [
{ view:"tabview", cells:[
{ header:"Dashboard", body:ChildView1 },
{ header:"Meta Info", body:ChildView2 }
]}
]
};
}
}// views/top.js
import {JetView} from "webix-jet";
import ChildView1 from "views/childview1";
import ChildView2 from "views/childview2";
import NewTabView from "views/newtab";
export default class TopView extends JetView {
config(){
return {
rows: [
{
view:"button", value:"Add new", click:()=>{
this.addTab();
}
},
{ view:"tabview", localId:"tabs", cells:[
{ header:"Dashboard", body:ChildView1 },
{ header:"Meta Info", body:ChildView2 }
]}
]
};
}
addTab(){
this.$$("tabs").addView({
header:"New Tab",
body:new NewTabView(this.app) //a class view
})
}
}// views/dashboard.js
import {JetView} from "webix-jet";
import AdminView1 from "views/admin1.js";
export default class TopView extends JetView {
config(){
return {
view:"dashboard",
gridColumns:4, gridRows:4,
cellHeight: 200,
cells:[
{
view:"panel",
x:0, y:0, dx:1, dy:1,
body:AdminView1
}
]
};
}
}// views/dashboard.js
import {JetView} from "webix-jet";
import AdminView1 from "views/admin1.js";
import AdminView2 from "views/admin2.js";
...
export default class TopView extends JetView {
config(){
return {
cols: [
{ view:"list", id:"list",
width:200,
drag:"source",
template:"#value# - (#dx#x#dy#)",
data:[
{ id:"1", value:"AdminView1", dx:1, dy:1 },
{ id:"2", value:"AdminView2", dx:1, dy:2 },
...
]
},
{
view:"dashboard", id:"grid",
gridColumns:4, gridRows:4,
cellHeight: 200
}
]
};
}
}// views/dashboard.js
import {JetView} from "webix-jet";
import AdminView1 from "views/admin1.js";
import AdminView2 from "views/admin2.js";
...
export default class DashboardView extends JetView {
config(){
return {
cols: [
// ...list
{
view:"dashboard", id:"grid",
gridColumns:4, gridRows:4,
cellHeight: 200,
factory:(obj) => {
obj.view = "panel";
obj.resize = true;
obj.body = this[$$("list").getItem(obj.name).value];
return obj;
}
}
]
};
}
init(){
this.AdminView1 = AdminView1;
this.AdminView2 = AdminView2;
...
}
}// views/top.js
import {JetView} from "webix-jet";
export default class TopView extends JetView {
config(){
return {
view:"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 },
{ id:2, title:"The Godfather", year:1972, votes:511495 },
{ id:3, title:"The Godfather: Part II", year:1974, votes:319352 }
]
};
}
}// views/subgrid.js
import {JetView} from "webix-jet";
export default class SubLayout extends JetView {
constructor(app, data){
super(app);
this.customData = data;
}
config(){
return {
rows:[
{ type:"header", template: () => this.customData.title },
{ template:"Subview", height: 30 }
]
}
}
}// views/top.js
import {JetView} from "webix-jet";
export default class TopView extends JetView {
config(){
return {
view:"datatable",
subview: (obj, target) => {
const sub = new SubLayout(this.app, "", {
title: obj.title
});
this.ui(sub, { container: target });
return sub.getRoot();
},
//datatable config
};
}
}this.$$("layout").addView(WebixJetView);