3) Sencha Touch
Sencha Touch (ST) – еще один фреймворк для разработки под мобильные платформы созданный на основе ExtJs. Основная цель ST – по мере возможности мимикрировать стандартный интерфейс и поведение элементов интерфейса мобильной платформы, предоставив программистам гибкое API. Соответственно, ST-приложение – это обычная клиент-серверная разработка, в качестве клиента выступает браузер Safari или Chrome или какой-либо другой webView, а в качестве сервера – любой сервис, способный «отвечать» в форматах JSON, XML и еще нескольких других.
По сути фреймворк представляет собой опять знакомую нам связку HTML5 + JS + CSS. Но в данном случае мы получаем больший упор на JS нежели на HTML5 при разработке интерфейса. Фреймворк предоставляет гибкие средства для разработки собственных UI компонентов , как на основе уже существующих , так и с нуля. Любой компонент библиотеки по факту является ST-объектом с набором методов и свойств.
К достоинствам Sencha можно отнести:
- Гибкость создания своего собственного интерфейса, по средством создания собственных компонент (более строгие требования к компонентам)
- много документации для быстрого старта
- наличие обзоров на русском языке
- бесплатный
- присутствует графическая среда разработки интерфейсов : Sencha Architect (платная 400$ с триалом на 30 дней)
- низкий порог вхождения
Кроме методов и свойств у большинства объектов есть события, на которые можно развешивать обработчики и шаблон вывода для визуальных элементов. Событий в мире ST очень много: фактически, каждый чих в этом мире является событием: начиная от создания элемента и добавления его на страницу, его отрисовкой и заканчивая уничтожением.
Ядро распадается на несколько множеств классов:
- Data — всяческая работа с данными, хранилища, преобразовании данных и работа с массивами данных, фильтрация, проверка и пр. Авторы попробовали ввести понятие модели данных (из MVC) и правил проверки (валидации), включая связи типа «многие к одному». Польза от этого нововведения довольно сомнительна, так как на стороне сервера все равно нужно будет проводить повторную проверку, но все же.
- Form — элементы интерфейса. Текстовое поле, выпадающий список, календарик, обычный список, переключатели и галочки — все это здесь.
- Layout — Часть ядра, отвечающая за рендеринг элементов в окне браузера. В теории, форма может находится одна на странице или быть частью панели вкладок, элементы могут быть прижаты к верху или низу формы.
- Lib — базовые компоненты ядра.
- Util — всевозможные утилиты и классы, которые не должны вызываться напрямую.
На данный момент доступна версия Sencha Touch — 2.2.1.
- Рассмотрим пошаговую инструкцию по созданию проекта Sencha Touch 2:
Для работы с SenchaTouch понадобиться :Скачав SDK разархивируем его в какой-либо каталог. Дальше инсталим SenchaCMD и Ruby. Обязательно стоит помнить , что нельзя допускать пробелов в путях инстала.
Необходимо убедиться что Ruby и SenchaCmd прописаны в системной пременной Path.После этого в cmd (виндовой) прописываем:
sencha -sdk /path/to/sdk generate app MyApp /path/to/www/myappПосле чего создастся скелет проекта, в который сразу подтянутся файлы из библиотеки.
Для сборки пакета (подчистит и оптимизирует и сгенерит нужное) необходимо встать в корень проекта и в командной строке набратьsencha app buildДля сборки нативного приложения
sencha app build nativeВсе конфигурации для сборки нативного приложения прописываются в packager.json
Запустить на эмуляторе/устройстве :
sencha app build -run nativeТаким образом мы видим, что сборку проекта можно осуществлять средствами Sencha Cmd и нет необходимости в сторонних упаковщиках
- Рассмотрим работу SenchaTouch + Cordova (на примере Android):
Для работы нам понадобиться :- Скачать SDK
- Скачать SenchaCMD
- Скачать Ruby(причем не последнюю версию , а 1.9.3)
- Скачать Eclipse
- Скачать Android SDK
- Скачать и установить плагин Android под Eclipse
- Скачать PhoneGap
Создаем проект Sencha:
sencha -sdk /path/to/sdk generate app MyApp /path/to/www/myappЗатем переходим в корень проекта и руками создаем каталог android. В архиве с PhoneGap идем в каталог lib\android и копируем от туда cordova-2.6.0.js в корень нашего проекта. В нашем проекте присутствует файл app.json. Открываем его и прописываем нашу js библиотеку. Выглядит примерно так:
"js": [
{
"path": "cordova-2.6.0.js"
},
....
],Далее открываем Eclipse и создаем в нем Android проект, в качестве воркспейса для проекта указываем путь : <путь к нашему проекту>\android. Т.е. таким образом в итоге в нашем каталоге с проектом создастся каталог android в котором будет создан андроид проект. По сути, что мы хотим, это сделать андроид проект в который будет собираться Sencha и как результат получить нативный проект.
Идем дальше. В папке assets нашего андроид проекта создаем каталог www , в который и будет билдиться Sencha.
В каталог libs нашего андроид проекта мы копируем cordova-2.6.0.jar, а в каталог res копируем каталог xml из архива phonegap (lib\android)
Открываем activity нашего андроид проекта и меняем его код на следующий (все кроме декларации пакета):import android.os.Bundle;
import org.apache.cordova.DroidGap;
public class AndroidSecnhaActivity extends DroidGap {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setIntegerProperty("loadUrlTimeoutValue", 600000);
super.loadUrl("file:///android_asset/www/<название типа билда,к примеру testing>/index.html");
}
}Открываем AndroidManifest нашего андроид приложения и прописываем необходимые нам права, к примеру :
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true"
android:anyDensity="true" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.SEND_SMS"/>Рефрешим Android проект и тем самым мы подгатовили phonegap к работе!
Если мы хотим подключить плагинг к phonegap, к примеру SmsSendingPlugin, то нам необходимо выполнить следующие действия:
В app.json прописываем плагин:"js": [
{
"path": "SmsSendingPlugun.js"
},
....
],В src Андроид проекта кладем SmsSendingPlugin.java изменяя ему пакет.
В андроид проекте идем в каталог res\xml и открываем находящийся в нем файл config.xml. В конец списка плагинов прописываем<plugin name="SmsSendingPlugin" value="com.example.androidsencha.SmsSendingPlugin"/>.Теперь мы можем работать с данным плагином.
ВАЖНО ПОМНИТЬ: Код программы мы пишем в проекте Sencha а не Android После того как все готово из каталога нашего проекта в командной строке пишем :
sencha app build package android\assets\wwwТеперь в Eclipse рефрешим проект и получаем готовый результат — можно заливать на устройство и тестить!
-
Ну и наконец — пример кода:
В данном примере создается ТабПанель с тремя вкладками:Ext.application({
launch: function () {
Ext.create('Ext.TabPanel', {
fullscreen: true,
tabBarPosition: 'bottom',
styleHtmlContent: true,
items: [{
title: 'Home',
iconCls: 'home',
html: 'Home container'
}, {
title: 'Profile',
iconCls: 'user',
html: 'Profile container'
}, {
title: 'Settings',
iconCls: 'settings',
html: 'Settings container'
}] // items
}); // create()
} // launch
}); // application()
Минусы Sencha Touch:
- Не до конца понятное поведение на Android устройствах. Вы спокойно можете столкнуться с тем, что разработанное вами приложение будет жутко тормозить на крутом планшете с 4-ех ядерным процессором и одновременно с этим достаточно быстро работать на вашем стареньком Samsung Tab 2.
- Проблемы с быстродействием из-за чрезмерного использования css3 и раздутой DOM модели
- Фреймворк постоянно обновляется и различия между соседними версиями зачастую губят ваше приложение при апдейте sdk. Поэтому всегда нужно быть готовым к проблемам.
Продолжение:
Обзор мультиплатформенных фреймворков — jQuery Mobile (1/6)
Обзор мультиплатформенных фреймворков — MGWT + PHONEGAP (2/6)
Обзор мультиплатформенных фреймворков — Appcelerator Titanium Mobile (4/6)
Обзор мультиплатформенных фреймворков — Vaadin TouchKit (5/6)
Обзор мультиплатформенных фреймворков — IBM WorkLight (6/6)