Знакомство с фрэймворком Webix

В этой статье мы бы хотели познакомить вас с фрэймворком Webix. Для демонстрации возможностей данного инструмента мы создадим интерфейс online аудио плеера. Не обольщайтесь — это всего лишь модель интерфейса. Исходный код доступен в демо и на странице GitHub.

Знакомство с Webix

Webix — это JavaScript и HTML5 фрэймворк для создания насыщенных кросс-платформенных интерфейсов веб приложений. Библиотека проста в изучении, легковестна и быстра. Результат легко интегрировать с Backbone.js, Angular.js или jQuery. К примеру вы можете воспользоваться методами jQuery для создания Webix приложений. Мне же больше всего по душе — простота данного инструмента.

Разработка проекта

Теперь давайте приступим к работе над нашим проектом.

Подключение библиотеки

После того как вы скачали библиотеку, создайте страницу index.html. Внутри подключите CSS и JavaScript файлы:

<link rel="stylesheet" href="codebase/webix.css" />
<script src="codebase/webix.js"></script>

Так же можно подключить фрэймворк с помощью Webix CDN:

<link rel="stylesheet" href="//cdn.webix.com/edge/webix.css" />
<script src="//cdn.webix.com/edge/webix.js"></script>

Я скачаю файлы. Вы спросите: “Почему?”. Одна из причин: тема оформления. Данная тема будет рассмотрена чуть позже.

Инициализируем библиотеку. Весь ваш код нужно поместить в конструктор webix.ui(). Для того чтобы код сработал после полной загрузки библиотеки воспользуйтесь командой webix.ready(function() { ... }:

webix.ready(function(){
    webix.ui({
        /* ваш код */
    });
});

Теперь давайте приступим к основным элементам страницы. Никакого HTML и CSS. Я обещаю.

Ряды и колонки

В Webix есть два свойства: rows и cols которые можно использовать для организации контента страницы:

webix.ui({
    rows: [
        {template: "Row One"},
        {template: "Row Two"}
    ]
});

Результат:

Строкой template:"Row One" мы создали простой контейнер. Внутри можно помещать любые HTML элементы. Для создания более сложных интерфейсов можно реализовать вложенные ряды:

webix.ui({
    rows: [
        {template:"Row One"},
        {cols:[
            {template:"Column One"},
            {template:"Column Two"}
        ]}
    ]
});

Результат:

Путём комбинирования рядов и колонок можно получить нужную структуру страницы:

webix.ui({
    rows: [
        {type:"header", template:"Online Audio Player"},
        {cols: [
            {rows: [
                {template:"Tree"},
                {view:"resizer"},
                {template:"Album Art", width: 250, height: 250}
            ]},
            {view: "resizer"},
            {rows: [
                {template:"Playlist"},
                {template:"Controls", height: 60}
            ]}
         ]
        }
    ]
});

Тут вы можете заметить что-то новенькое: type:"header". Этим выражением мы обозначаем, что данный блок будет шапкой. Так же я задействовал свойство view: resizer для того чтобы можно было изменять размеры полей “Album Art” и “Playlist”. В свойстве view мы указываем какой элемент пользовательского интерфейса должен быть создан.

Результат:

Деревья и таблицы: навигация по массиву данных

Теперь вдохнём немного жизни в наш интерфейс.

Виджет “Tree”

Воспользуемся виджетом Tree Widget для организации коллекций наших песен. В файле data.js содержится вся нужная информация. В нём определена парочка массивов. Подключите данный файл в HTML.

Теперь давайте отобразим эти данные на странице. Замените template: "Tree" на код:

Данный код построит дерево данных с идентификатором myTree. Данные берутся из массива recordsData файла data.js.

Результат:

Виджет DataTable

Виджет DataTable полезен в случае, если вам нужно отобразить список данных. К примеру… Плейлист!

Замените строку template: "Playlist" на:

view: "datatable",
id: "myList",
autoConfig: true,
data: oceanData

Данный код создаст элемент с идентификатором myList. Возьмёт данные из соответствующего массива и создаст нужные колонки. В нашем случае используется массив gridColumns из data.js. На последнем шаге в качестве источника данных используется массив oceanData.

Результат:

Выглядит неплохо и даже работает сортировка! Однако наше дерево коллекций и плейлист разделены. Давайте это исправим.

Tree + DataTable = Data Explorer

Вот как я объединил дерево коллекций и плейлист:

var selected = oceanData;
webix.ui({
    /* ... */
    {view:"tree", id:"myTree", data:recordsData , select: oceanData, on: {
        onSelectChange: function(){
            selected = $$("myTree").getSelectedId();
            if (isNaN(selected)) {
                $$("myList").clearAll();
                $$("myList").define("data", selected);
                $$("myList").refresh();
            }
        }
        }
    },
    /*...*/
    {view:"datatable", id:"myList", autoConfig:true, data:selected}

Что у нас тут? В переменной selected содержится значение альбома по умолчанию. DataTable будет использовать его в качестве источника данных. Обратите внимание что в виджите Tree Widget теперь есть обработчик события:

on: {
    onSelectChange: function() {
    }
}

Данная функция будет вызываться после выбора элемента коллекции. В нашем случае selected = $$("myTree").getSelectedId(); записываем выбранный id в переменную selected. Данное значение будет числом, если мы выбрали папку; массивом если мы выбрали альбом.

Проверка значения переменной:

if (isNaN(selected))

Не число? Хорошо! Выполним три простых шага:

$$("myList").clearAll();
$$("myList").define("data", selected);
$$("myList").refresh();

Очищаем список, выполнив метод clearAll(). Инициализируем его согласно новому значению переменной selected через метод define(). "data" — это поле которое нужно изменить, а selected — новое значение данной переменной. В конце обновляемся — refresh(). Результат:

Теперь при выборе любого элемента из нашего дерева содержимое плейлиста изменится.

Изображения и кнопки

Давайте зададим обложку по умолчанию:

var coverPath = "imgs/oceanData.jpg";

Нам необходимо чтобы поле “Album Art” постоянно обновлялось. Для этого вставьте следующий код в секцию обработки событий:

on: {
	onSelectChange: function(){
		/*...*/
		coverPath = "imgs/" + selected + ".jpg";
		$$("myCover").define("data", { src: coverPath });
	}
}

Название изображения альбома будет такое же, как и id выбранного альбома. Именно поэтому мы снова можем воспользоваться значением переменной selected. Затем вызовем метод define() для обновления данных контейнера myCover.

Теперь давайте покажем пользователю изображение. Замените:

template:"Album Art", width: 250, height: 250

на код:

width: 250, height: 250, id:"myCover", data: {src: coverPath},
    template: function (obj) {
        return '<img src="'+obj.src+'"/>'
    }

В поле data определён контент нашего контейнера. В src путь к изображению. В нашем случае это coverPath. Значение данного поля будет изменяться при “выстреле” события onSelectChange. В поле template определили функцию генерирующую HTML код.

Давайте проверим как работает секция “Album Art:

Выбираем новый альбом:

Теперь настало время для заключительной части: кнопок! Замените:

template:"Controls", height: 60

на:

cols: [
   {gravity: 3 },
   {view:"button", value:"< Previous"},
   {view:"button", value:"Play / Pause"},
   {view:"button", value:"Next >"}
]

В результате выполнения данного кода на нашей странице появятся три колонки; в каждой по кнопке. Параметр gravity определяет пропорции изображения относительно общего родительского контейнера.

Результат:

Изменение темы оформления

Самое время вернуться к вопросу: подключать фрэйморк, используя локальные файлы или CDN. Внутри вы сможете найти кучу тем оформления! Хватит одной строчки для смены:

<link rel="stylesheet" href="codebase/skins/touch.css" />

Итог

Как видите, создать неплохой интерфейс с помощью Webix не составило особого труда. Синтаксис интуитивен, документация написана неплохо. Демо примеров тоже немало.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.sitepoint.com/introducing-webix-framework/
Перевел: Станислав Протасевич
Урок создан: 8 Мая 2016
Просмотров: 13538
Правила перепечатки


5 последних уроков рубрики "HTML5"

  • Расширяем возможности HTML за счёт создания собственных тегов

    В этом уроке я покажу процесс создания собственных HTML тегов. Пользовательские теги решают множество задач: HTML документы становятся проще, а строк кода становится меньше.

  • Определение доступности атрибута HTML5 с помощью JavaScript

    Сегодня мы посмотрим, как можно организовать проверку доступности атрибута HTML5 с помощью JavaScript. Проверять будем работу элементов details и summary.

  • HTML5: API работы с вибрацией

    HTML5 - глоток свежего воздуха в современном вебе. Она повлиял не только на классический веб, каким мы знаем его сейчас. HTML5 предоставляет разработчикам ряд API для создания и улучшения сайтов с ориентацией на мобильные устройства. В этой статье мы рассмотрим API для работы с вибрацией.

  • Создание форм с помощью Webix Framework — 4 практических примера

    Веб дизайнеры частенько сталкиваются с необходимостью создания форм. Данная задача не простая, и может вызвать головную боль (особенно если вы делаете что-то не стандартное, к примеру, много-страничную форму). Для упрощения жизни можно воспользоваться фрэймворком. В этой статье я покажу вам несколько практических приёмов для создания форм с помощью фрэймворка Webix.

  • Отключение HTML5 валидации

    Бесит валидация, которая добавляется к полям формы, если вы пользуетесь HTML5? Её можно без проблем отключить.

^ Наверх ^