Junior — это интерфейсная среда для создания мобильных приложений HTML 5. В зависимости от внешних библиотек, таких как modernizer , zepto , zepto flickable , lodash и backbone , он создает мобильные приложения с естественным внешним видом и интерфейсом с использованием компонентов пользовательского интерфейса Ratchet CSS .
Что мы будем создавать
В этом уроке мы создадим простое приложение со списком задач с нуля, используя инфраструктуру Junior. У нас будет 2 экрана, один для добавления элементов списка задач, а второй для просмотра всех добавленных элементов.
Исходный код этого руководства доступен на GitHub .
Начиная
Для начала загрузите или клонируйте репозиторий Junior:
git clone https://github.com/justspamjustin/junior.git
Перейдите в junior
каталог и установите необходимые зависимости:
bower install
После установки необходимых зависимостей откройте файл index.html
в junior
папке:
Создание Home view
Давайте начнем с создания домашнего представления для нашего приложения. На главном экране мы отобразим все элементы списка задач, добавленные пользователем. На главном экране также будет кнопка для добавления новых элементов в список. Мы будем использовать Ratchet для создания нашего пользовательского интерфейса.
Мы начнем с нуля. Создайте файл с именем app.html
внутри junior
папки. Включите все необходимые js и css и добавьте теги, которые ожидает Junior, как показано ниже:
<!DOCTYPE html> <html> <head> <title></title> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <link rel="stylesheet" href="lib/stylesheets/ratchet.min.css"> <link rel="stylesheet" href="src/stylesheets/junior.css"> <link rel="stylesheet" href="docs/stylesheets/lib/font-awesome.css"> <link rel="stylesheet" href="docs/stylesheets/style.css"> </head> <body> <div id="app-container"> <div id="app-main"></div> </div> <script src="lib/javascripts/modernizr.custom.15848.js"></script> <script src="lib/javascripts/zepto.min.js"></script> <script src="lib/javascripts/zepto.flickable.min.js"></script> <script src="lib/javascripts/lodash.min.js"></script> <script src="lib/javascripts/backbone-min.js"></script> <script src="src/javascripts/junior.js"></script> <script src="docs/javascripts/app.js"></script> </body> </html>
Добавьте еще один файл с именем app.js
внутри junior/docs/javascripts
. Здесь мы будем определять наши маршруты и представления, app.html
его в файл app.html
.
<script src="docs/javascripts/app.js"></script>
Загрузите и скопируйте хранимые таблицы стилей из dist/css
в junior/lib/stylesheets/
, заменив те, которые уже есть.
Давайте начнем с создания списка. Мы определим html для списка, а затем используем младшую библиотеку для расширения представления. Добавьте ниже в app.js
:
var HomeTemplate = [ '<nav class="bar bar-standard">', '<header class="bar bar-nav">', '<button id="btnAddTask" class="btn pull-right">Add Task</button>', '<h1 class="title">ToDo List Junior App</h1>', '</header>', '</nav>', '<div class="bar bar-standard bar-header-secondary">', ' <ul class="table-view">', ' <li class="table-view-cell">Item 1</li>', ' <li class="table-view-cell table-view-cell">Item 2</li>', ' <li class="table-view-cell">Item 3</li>', ' </ul>', '</div>' ].join('\n');
Выше мы определили наш список как переменную. Далее мы расширим его, используя младший для создания представления. Добавьте ниже в app.js
:
var HomeView = Jr.View.extend({ render: function() { this.$el.html(HomeTemplate); return this; } }); [/js] Now since we created our view, we need to define a route for it. [js] var AppRouter = Jr.Router.extend({ routes: { 'home': 'home' }, home: function() { var homeView = new HomeView(); this.renderView(homeView); } });
Приведенная выше функция home
отображает HomeView
. Затем запустите маршрутизатор и запустите историю магистрали, добавив приведенный ниже app.js
в app.js
:
var appRouter = new AppRouter(); //init the router Backbone.history.start(); //start backbone history
Вот как должен выглядеть app.js
:
var HomeTemplate = [ '<nav class="bar bar-standard">', '<header class="bar bar-nav">', '<button id="btnAddTask" class="btn pull-right">Add Task</button>', '<h1 class="title">ToDo List Junior App</h1>', '</header>', '</nav>', '<div class="bar bar-standard bar-header-secondary">', ' <ul class="table-view">', ' <li class="table-view-cell">Item 1</li>', ' <li class="table-view-cell table-view-cell">Item 2</li>', ' <li class="table-view-cell">Item 3</li>', ' </ul>', '</div>' ].join('\n'); var HomeView = Jr.View.extend({ render: function() { this.$el.html(HomeTemplate); return this; } }); var AppRouter = Jr.Router.extend({ routes: { 'home': 'home' }, home: function() { var homeView = new HomeView(); this.renderView(homeView); } }); var appRouter = new AppRouter(); Backbone.history.start();
Сохраните app.js
и перейдите к app.html#home
и вы должны увидеть экран ниже:
Создание представления Добавить задачу
Далее мы будем создавать представление добавления задачи. Это представление позволит пользователям добавлять задачи в существующий список задач.
Добавьте еще одну переменную с именем AddTaskView
в app.js
как показано:
var AddTaskTemplate = [ '<nav class="bar bar-standard">', '<header class="bar bar-nav">', '<button id="btnBack" class="btn btn-link btn-nav pull-left">Back</button>', '<h1 class="title">Add Task</h1>', '</header>', '</nav>', '<div class="bar bar-standard bar-header-secondary">', '<form>', '<input type="text" placeholder="Full name">', '<input type="search" placeholder="Search">', '<textarea rows="3"></textarea>', '<button class="btn btn-positive btn-block">Save Task</button>', '</form>', '</div>' ].join('\n');
Расширьте представление, используя младший, и создайте маршрут для представления Addtask
(заменив текущую переменную AppRouter
):
//extended the view using junior lib var AddTaskView = Jr.View.extend({ render: function() { this.$el.html(AddTaskTemplate); return this; } }); var AppRouter = Jr.Router.extend({ routes: { 'home': 'home', 'addTask': 'addTask' //added the route for Add Task View }, home: function() { var homeView = new HomeView(); this.renderView(homeView); }, addTask: function() { var addTaskView = new AddTaskView(); this.renderView(addTaskView); } });
Установите вид по умолчанию на home, добавив следующий код:
Jr.Navigator.navigate('home',{ trigger: true });
Теперь попробуйте app.html
к app.html
и он должен загрузить домашний вид по умолчанию. Откройте app.html#addTask
в вашем браузере, и вы сможете увидеть представление AddTask
как показано ниже:
Далее, давайте добавим события нажатия на кнопки « Add Task
и « Back
в HomeView
и AddTaskView
соответственно.
Определите события щелчка для функции HomeView
и onClickAddTask
чтобы перейти к AddTaskView
. Замените текущую переменную HomeView
с кодом ниже:
var HomeView = Jr.View.extend({ render: function(){ this.$el.html(HomeTemplate); return this; }, events: { 'click #btnAddTask': 'onClickAddTask' }, onClickAddTask: function() { Jr.Navigator.navigate('addTask',{ trigger: true, animation: { // This time slide to the right because we are going back type: Jr.Navigator.animations.SLIDE_STACK, direction: Jr.Navigator.directions.RIGHT } }); } });
Точно так же нам нужно определить другое событие нажатия для кнопки « Back
в AddTaskView
.
Обновите переменную AddTaskView
так:
var AddTaskView = Jr.View.extend({ render: function() { this.$el.html(AddTaskTemplate); return this; }, events: { 'click #btnBack': 'onClickBack' }, onClickBack: function() { Jr.Navigator.navigate('home', { trigger: true, animation: { type: Jr.Navigator.animations.SLIDE_STACK, direction: Jr.Navigator.directions.LEFT } }); } });
Попробуйте app.html
к app.html
и вы сможете перемещаться между представлениями, используя кнопки « Add Task
и « Back
.
Вывод
В этом уроке. мы разработали простое приложение со списком дел с использованием инфраструктуры Junior . Мы использовали компоненты Ratchet для создания пользовательского интерфейса нашего мобильного приложения. В следующей части этого руководства мы реализуем необходимые функции для разработанных страниц.
Что ты думаешь о Джуниоре? Есть ли у него какие-либо преимущества перед многими другими мобильными средами пользовательского интерфейса?