https://slides.com/mkozhukh/webix/live
- обычные пользователи
- простой дизайн
- простые данные
- потребление информации
- бизнес
- сложный дизайн
- много сложных данных
- анализ и создание
HTML
FrameWorks
Bootstrap
Webix
- Верстка
- MVC
- Формы
- Компоненты
IE8+, Chrome, Safari, Firefox, ...
Desktop and Touch
128kb
~ 70 components
Skins, Material Design
лайаут, аккордион, табвью, мультивью
лист, грид, дерево, три-грид, датавью, график
форма, тулбар, кнопки, инпуты, слайдеры, селекты, комбобоксы, календрь, выбор цвета, и много других
меню, попапы, окна, сообщения
http://docs.webix.com/desktop__components.html
<script src="//cdn.webix.com/edge/webix.js"></script>
<link rel="stylesheet" href="//cdn.webix.com/edge/webix.css"></link>
<script>
webix.ui({
view:"button", //что рисуем
id:"myButton", //уникальное имя, опционально
label:"Начнем же!" //прочие свойства
})
</script>
- что мы хотим получить
- где оно должно распологаться
- как оно должно выглядеть
- задать размеры
- задать имя
- загрузить данные
- задать поведение
//кнопка
webix.ui({
view:"button", label:"Начнем же!"
})
//график
webix.ui({
view:"chart", data:some_data
})
//дерево
webix.ui({
view:"tree", data:some_data
})
Что мы хотим получить
http://docs.webix.com/desktop__components.html
//кнопка на весь экран :)
webix.ui({
view:"button", label:"Начнем же!"
})
//кнопка внутри заданного контейнера
webix.ui({
view:"button", container:"mybox", label:"Начнем же!"
})
//кнопка внутри заданного контейнера
webix.ui({
view:"button", container:document.body.firstChild, label:"Начнем же!"
})
Где мы хотим это увидеть
<div id="mybox"></div>
Интерлюдия №1
http://webix.com/snippet
Редактор снипетов
Пример использования контейнера
http://webix.com/snippet/029f4b0c
//обычная кнопка
webix.ui({
view:"button", label:"Начнем же!"
})
//красная кнопка
webix.ui({
view:"button", css:"redButton", label:"Начнем же!"
})
//синяя кнопка
webix.ui({
view:"button", css:{ background:"blue" }, label:"Начнем же!"
})
Как оно должно выглядеть
.redButton{ background:red }
//фиксированный размер
webix.ui({
view:"button", label:"My Button"
width:100, //"px"
minWidth:100,
maxWidth:100,
height:100,
minHeight:100,
maxHeight:100
})
//дата компоненты могут подстраиваться под контент
webix.ui({
view:"datatable",
autoheight:true,
autowidth:true
});
Сколько место займет
Интерлюдия №2
http://webix.com/snippet/481f22ed
Пример использования размеров
Пример использования стилей
http://webix.com/snippet/e4c17b9a
//просто объекты
webix.ui({
view:"button",
css:{ background: "red" }
})
//сложные свойства
webix.ui({
view:"chart",
legend:{ value:"#value#", color:"#color#" }
})
//вложенные компоненты
webix.ui({
view:"window",
body:{ view:"button", label:"Закрыть" }
})
//три столбца
webix.ui({
view:"layout",
cols:[
{ view:"button", label:"Button 1" },
{ view:"button", label:"Button 2" },
{ view:"button", label:"Button 3" }
]
})
//три строки
webix.ui({
view:"layout",
rows:[
{ view:"button", label:"Button 1" },
{ view:"button", label:"Button 2" },
{ view:"button", label:"Button 3" }
]
})
не у всех
//вкладываем друг в друга
//можно создать любую структуру
webix.ui({
view:"layout",
rows:[
{ view:"button", label:"Button 1" },
{ cols:[
{ view:"button", label:"Button 2.1" },
{ view:"button", label:"Button 2.2" }
]},
{ view:"button", label:"Button 3" }
]
})
не у всех
//можно (нужно!) разбивать объект на части
// - повторное использование частей
// - модульность
// - меньше ошибок
var top = { view:"button", label:"Button 1" };
var bottom = { view:"button", label:"Button 3" };
var center = { cols:[
{ view:"button", label:"Button 2.1" },
{ view:"button", label:"Button 2.2" }
]};
webix.ui({
view:"layout",
rows:[
top, center, bottom
]
})
не у всех
//компоненты занимают все свободное пространство
webix.ui({
rows:[
{ view:"button", height:100 },
{ view:"button" }
]
});
//размеры в процентах
webix.ui({
rows:[
{ view:"button", gravity:2 }, //40%
{ view:"button", gravity:3 } //60%
]
});
Сколько место займет
Интерлюдия №3
http://webix.com/snippet/5dd6063f
Пример использования лайатоу
http://webix.com/snippet/17c31906
Пример использования размеров
Задание №1
//окно, вложенная компонента
webix.ui({
view:"window",
body:{
view:"button", label:"Button 1"
}
})
//таббар, несколько компонент
webix.ui({
view:"tabview",
cells:[
{ view:"button", label:"Tab 1"},
{ view:"button", label:"Tab 2"},
{ view:"button", label:"Tab 3"}
]
})
не у всех
// только у data компонент
// загружает данные в компонент
var data = [{ id:1, value:"one"}, { id:2, value:"two"}];
webix.ui({
view:"list",
data: data
})
webix.ui({
view:"list",
url:"data.php"
})
не у всех
//data.php
echo json_encode(array(
array("id" => 1, "value" => "one")
array("id" => 2, "value" => "two")
));
var data = [{ id:1, value:"one"}, { id:2, value:"two"}];
//строка
webix.ui({
view:"list",
template:"#id#. #value#",
data: data
})
//функция
webix.ui({
view:"list",
template:function(obj){
return obj.id+" "+obj.value
},
data: data
})
не у всех
Как данные будут отображены
Интерлюдия №4
http://webix.com/snippet/f37276d6
Пример использования данных
Пример использования темплейтов
http://webix.com/snippet/5484f587
Задание №2
//обычная кнопка
webix.ui({
view:"button", id:"myButton", label:"Начнем же!"
})
//получаем компонент и вызываем любой апи метод
$$("myButton").hide();
Как его звать
//можно задать прямо в конфиге
webix.ui({
view:"list", id:"mylist",
template:"#id#. #value#",
on:{
onItemClick:function(id){
alert(id + " was clicked");
}
}
})
//или установить позднее
$$("mylist").attachEvent("onAfterLoad", function(){
this.select( this.getFirstId() );
})
Реакция на действия пользователя
Интерлюдия №5
http://webix.com/snippet/087c00f1
http://webix.com/snippet/732950d2
Пример использования событий
webix.ui({
view:"form", id:"myform"
//поля
rows:[
{ view:"text", name:"firstname", value:""},
{ view:"text", name:"email", value:""}
],
})
//загрузка данных
$$("myform").setValues({ firstname:"Alex", email:"alex@gmail.com" });
//или
$$("myform").load("data.php");
//сохранение данных
webix.ajax().post("save.php", $$("myform").getValues() );
webix.ui({
view:"datatable",
//поля
columns:[
{ id:"name", fillspace:1, header:"Full Name"},
{ id:"address", fillspace:1, template:"#country#, #city#"},
{ id:"birthdate",
width:100, format: webix.i18n.dateFormatStr }
],
url:"data.php"
})