.. in Webix Apps
View Events
View Events
Handling View Events
1) attachEvent(name, handler)
$$("mylist").attachEvent("onItemClick", function(){
webix.message("Item was clicked");
});2) on property in configuration
{
view:"list",
data:[ "Start", "Data", "Profile" ],
on:{
onItemClick:function(id){
webix.message("Item was clicked "+id);
}
}
}3) click property in configuration (for controls)
{ view:"button", value:"Click me", click:function(){
webix.message("Button was clicked");
}}* Event names are case-insensitive
* 'this' keyword within handler function points to the view, which event is handled
attachEvent or on?
1) The moment of handler definition
webix.ui({
view:"list",
id:"mylist",
data:[ "Start", "Data", "Profile" ]
});
$$("mylist").attachEvent("onAfterRender", function(){
webix.message("List was rendered");
});Result: event will not fire on 1st render
2) Possibility to remove handler at runtime
Handling Webix Global Events
Just webix.attachEvent
webix.attachEvent("onClick", function(){
webix.message("Mouse click detected");
});Handling HTML Events
webix.event (node, event, handler);
webix.event(window, "resize", function(){
webix.message("Window was resized");
});webix.event(document.getElementById("test"), "click", function(){
webix.message("Test div was clicked");
});webix.event($$("mylist").getNode(), "click", function(){
webix.message("List was clicked");
});Removing Event Handlers
var event2 = webix.event(window, "resize", function(){
webix.message("Window was resized");
});
webix.eventRemove(event2);var event1 = $$("mylist").attachEvent("onItemClick", function(){
webix.message("Item was clicked");
});
$$("mylist").detachEvent(event1);
attachEvent() --> detachEvent()
webix.event() --> webix.eventRemove()
config.on --> no way till view destruction :(
Any questions?
Interactive Dialogs
Messages
webix.message({
text:"Please, fill in the form",
type:"error",
expire:-1
}); webix.message("Please, fill in the form"); webix.alert("Please, fill in the form"); webix.alert({
text: "Please, fill in the form",
title:"Attention"
}).then(function(){
/* some actions */
});Confirmation Dialog
webix.confirm("Form is incomplete. Continue?"); webix.confirm({
title:"Form is incomplete",
text:"Do you still want to continue?"
}).then(
function(){
webix.message("Confirmed");
},
function(){
webix.message("Rejected");
}
);Prompt Dialog
webix.prompt("Please, enter you age.."); webix.prompt({
title: "Hi, bro",
text: "Please enter your name..",
ok: "Submit",
input:{
required:true
}
}).then(
function(result){
webix.message("Nice to meet you, "+result+"!");
},
function(){
webix.message("See you next time :(");
}
); Windows and Popups
webix.ui({
view:"window",
id:"mywindow",
height:250,
width:300,
position:"center",
move:true,
head:"My window",
body:{
template:"Some text"
}
}).show(); var win = webix.ui({
view:"window", id:"mywindow"
});
win.show();
//or
$$("mywindow").show();Windows and Popups
webix.ui({
view:"window",
id:"mywindow",
move:true,
position:"center",
head:{
cols:[
{},
{ view:"icon", icon:"wxi-close" }
]
},
body:{
view:"datatable",
autoConfig:true,
autoheight:true,
autowidth:true,
data:[]
}
});
$$("mywindow").show();
//near some HTML element
$$("mywindow").show(node);
$$("mywindow").hide();Show window
Hide window
Close window
$$("mywindow").close();Getting User Data: Form
What does this form consist of?
{
view:"form",
width:280,
elements:[ // rows
{ type:"section", template:"Edit films"},
{ view:"text", label:"Title"},
{ view:"text", label:"Year"},
{ view:"text", label:"Rating"},
{ view:"text", label:"Votes"},
{ cols:[
{view:"button", css:"webix_primary",
value:"Add new"},
{view:"button", value:"Clear"}
]},
{}
]
}What other form elements can we use?
Form Elements
To become form element, view needs:
{
view:"form",
elements:[
{ type:"section", template:"Edit films" },
{ view:"text", label:"Title", name:"title" },
{ view:"text", label:"Year", name:"year" },
{ view:"text", label:"Rating", name:"rating" },
{ cols:[
{ view:"button", css:"webix_primary", value:"Add new" },
{ view:"button", value:"Clear" }
]},
{}
]
}Magic of Element Name
{
view:"form",
id:"myform",
elements:[
{ view:"text", label:"Title", name:"title" },
{ view:"text", label:"Year", name:"year" },
{ view:"text", label:"Rating", name:"rating" }
]
}var titleInput = $$("myform").elements.title;
titleInput.setValue("");
$$("myform").setValues({
title:"My favourite film",
year:"2000",
rating:"125478"
});Form Values
{
view:"form",
id:"myform",
elements:[
{ view:"text", label:"Title", name:"title" },
{ view:"text", label:"Year", name:"year" },
{ view:"text", label:"Rating", name:"rating" }
]
}$$("myform").setValues({
title:"My Firm",
year:"2000",
notes:"Watch next week"
});
console.log($$("myform").getValues());
/*
{
title:"My Firm",
year:"2000",
notes:"Watch next week"
}
*/Form API
$$("myform").clear();var titleInput = $$("myform").elements.title;
var form = titleInput.getFormView();{
view:"form",
id:"myform",
elements:[
{ view:"text", label:"Title", name:"title" },
{ view:"text", label:"Year", name:"year" }
],
elementsConfig:{
labelPosition:"top"
}
}Form Events
* can be set via elementsConfig
{
view:"form",
elements:[
{ view:"text", label:"Title", name:"title", on:{
onChange:function(newv, oldv){
webix.message(newv);
}
}},
{ view:"text", label:"Year", name:"year"}
]
}{ view:"form", on:{
onChange:function(newv, oldv){
webix.message(newv);
}
}}Form Validation
{
view:"form", id:"myform",
elements:[
{view:"text", label:"Title", name:"title"},
{view:"text", label:"Year", name:"year"}
],
rules:{
title:webix.rules.isNotEmpty,
year:function(value){
return value>2000;
}
}
}var result = $$("myform").validate();
//true or falseInvalid form: how to tell the user?
{
view:"form",
on:{
onValidationError:function(){
webix.message({text:"Data is incorrect", type:"error"});
}
}
}2. Define invalidMessage for contol
Form with Data Component
var values = $$("myform").getValues();
//{ title:"Some", year:"1994"}var small_film_set = [
{ id:1, title:"The Shawshank Redemption", year:1994, votes:678790, rating:9.2, rank:1},
{ id:2, title:"The Godfather", year:1972, votes:511495, rating:9.2, rank:2}
];
webix.ui({
view:"datatable", id:"mydata", autoConfig:true,
data:small_film_set
});Form values:
Component data:
Why not add more?
$$("mydata").add(values);Useful Links
Webix Topics:
Task for practice: click here
Follow-up text: click here