Статьи

Backbone.js — из уст экспертов

С наступлением зимы здесь, в Новой Зеландии, только начинает становиться довольно холодно и противно, и это утро не стало исключением. Однако вставать с кровати было приятно, так как я провел первый час своего дня в гостях у прекрасного Энди Эпплтона в качестве последнего эксперта в наших сеансах чата Talk with the Experts . Если вы еще не слышали об Энди, вы можете проверить его здесь на его новом курсе «Learnable» , который, как оказалось, находится на Backbone…

Утренняя сессия была одной из самых тихих, которые я проводил, но уровень чата никоим образом не был отражением этого. Если вы пропустили сеанс, потому что у вас было что-то еще, не бойтесь — вы найдете стенограмму ниже.

Прежде чем вы углубитесь в это, вот пара ссылок.
Следите за предстоящим курсом Энди — Разработка приложений Backbone.js
Вы можете подписаться на уведомления по электронной почте о будущих сессиях экспертов здесь или просмотреть список предстоящих сессий здесь.

Вот и все для админки — вот расшифровка:

[19:58] <HAWK> Так что в любом случае, добро пожаловать, Энди, спасибо за ваше время

[19:58] <Andy> эй, нет проблем!

[19:58] <HAWK> Итак, мы официально стартуем через пару минут, но в то же время, не стесняйтесь представиться

[19:58] <HAWK> Кто-нибудь читает курс Энди?

[20:00] <HAWK> https://learnable.com/courses/backbone-js-a-practical-beginner-s-guide-2742

[20:00] <Andrew> Я немного поработал с Backbone в прошлом, включая создание аудио / видео плеера только для HTML5 без бэкенда. 😉

[20:00] <Джерри> Спасибо, Ястреб

[20:01] <HAWK> Никаких проблем — если вы являетесь обучаемым участником, не пропустите последующий курс — https://learnable.com/courses/backbone-js-app-development-2741

[20:01] <Андрей> (Шутка, которую надо сделать 🙂 Ты в порядке, Джерри. Ты в порядке. 😉

[20:01] <Джерри> LOL

[20:02] <Andrew> Хороший Ястреб, возможно, посмотри на это.

[20:02] <HAWK> Таким образом, мы также можем начать — я буду модерировать сессию сегодня утром (хотя вряд ли понадобится модерация), но формат является бесплатным для всех

[20:02] <Андрей> Не совсем новичок, не профессионал. 😉

[20:02] <HAWK> Ты бросаешь вопросы Энди, а он отвечает на них!

[20:02] <HAWK> Кто-нибудь здесь уже немного использует Backbone (кроме Эндрю)

[20:03] <Jerry> Еще даже не новичок, поэтому у меня нет вопросов на данный момент

[20:03] <HAWK> Это круто. Lurking — отличное место для начала.

[20:04] <HAWK> А как насчет остальных?

[20:04] <Дуг> Нет.

[20:04] <BrianMann> Да, я использую Backbone, а также у меня есть серия руководств, посвященных ее использованию, www.backbonerails.com

[20:05] <BrianMann> ага, просто вскочил, чтобы посмотреть, о чем был этот разговор с экспертами

[20:05] <Андрей> Ха-ха, мило. Управляя гамбитом от начинающих до профи!

[20:06] <Джерри> Круто! Спасибо, Брайан. Похоже, это может быть полезно

[20:06] <Andrew> Энди, что ты используешь для своего бэкэнда?

[20:06] <Andy> действительно зависит, но я в основном использовал Rails и Node

[20:06] <Andrew> Я немного попробовал с Rails, хотел попробовать с Node.

[20:06] <HAWK> Как вы узнали о сеансе BrianMann?

[20:07] <Andy> да, наверное, это зависит от того, к чему ты привык

[20:07] <BrianMann> Я смотрю темы #Backbone в Twitter, так что кто-то написал об этом в Твиттере.

[20:08] <HAWK> Мы проводим эти сессии еженедельно на разные темы

[20:09] <Andrew> Энди — У меня был один вопрос о взглядах.

[20:09] <Andy> Эндрю Я недавно увидел действительно симпатичный каркас JSON API для узла — http://balderdashy.github.io/sails/

[20:10] <Андрей> О, аккуратно. Я посмотрю на это. 😉

[20:10] <Andrew> Итак, для моего видео / аудио проигрывателя SPA у меня был один вид (с именем Index), который в основном просто вызывал шаблоны для множества других вещей.

[20:11] <Андрей> Есть ли лучший способ структурировать его, чем 6-7 шаблонных вызовов для разных частей страницы?

[20:11] <Andy> да, я бы предпочел новое представление для каждого шаблона как общее правило

[20:12] <Andy> так проще справляться с событиями и перерисовывать отдельные шаблоны

[20:12] <Andy>, так что имейте представление верхнего уровня, которое создает дочерние представления по мере необходимости

[20:13] <Андрей> Снова смотрю на мой старый код. Похоже, что каждый шаблон был для отдельной «страницы», чтобы заложить леса, как это было для других видов.

[20:13] <HAWK> Добро пожаловать, Рамсей, это бесплатно для всех, так что, пожалуйста, задавайте вопросы, если они у вас есть.

[20:13] <Андрей> Возможно, я пытался сделать слишком много в одном модуле. 😉

[20:14] <Andy> звучит так — маршрутизатор — это, вероятно, место для управления этим состоянием

[20:14] <Андрей> Да, имеет смысл.

[20:15] <Andy> тогда вы можете иметь вид верхнего уровня для каждой страницы

[20:16] <Andrew> Немного переключаясь, большинство разработчиков, с которыми я работаю, — это бэкенд-люди. Что я должен сделать, чтобы убедить их сделать больше фронтэнда или хотя бы ценность MVC Javascript?

[20:16] <Andy> Это сложно, потому что это действительно зависит от того, что ты строишь

[20:17] <BrianMann> В существенных приложениях я обнаружил, что использование объекта-посредника (обычно известного как контроллер) помогает в рабочем процессе. Этот объект в основном используется для создания экземпляров представлений, сообщая им, куда идти, и обеспечивая им доступ к моделям / коллекциям.

[20:17] <Andy> Я думаю, что это действительно хорошо подходит для сайтов типа приложений, но не для сайтов с большим содержанием (например, блог)

[20:18] <Andrew> Многие из наших приложений очень загружены данными, но я не думаю, что они уделяют достаточно внимания интерфейсному интерфейсу UX / UX.

[20:19] <HAWK> К вашему сведению, сегодня вечером я опубликую стенограмму этого заседания на sitepoint.com.

[20:19] <HAWK> Если у кого-нибудь есть какие-либо полезные ресурсы, пожалуйста, добавьте их

[20:20] <thomfoolery> есть презентация с этим? или это просто открытый чат форум?

[20:20] <Andy> да, есть курс на https://learnable.com/courses/backbone-js-a-practical-beginner-s-guide-2742

[20:21] <HAWK> Нет презентации, это просто открытый чат — возможность задавать любые вопросы, поднимать любые вопросы и т. Д.

[20:21] <Энди> и пример приложения тоже — https://github.com/mrappleton/localgram

[20:23] <thomfoolery> Итак, я понимаю MVC и понимаю, что Backbone.js — это библиотека / фреймворк MV. Означает ли это, что вы создаете свои собственные контроллеры, как хотите?

[20:24] <Энди> это то, к чему люди относятся по-разному

[20:24] <thomfoolery> или этот элемент управления должен быть делегирован событиям, обрабатываемым в каждом представлении?

[20:24] <Andy> объект роутера похож на контроллер

[20:24] <thomfoolery> на самом деле события, похоже, тоже могут обрабатываться моделями

[20:24] <Andy> вы можете использовать события для отправки сообщений между чем угодно — моделями, представлениями, коллекциями или маршрутизаторами

[20:24] <thomfoolery> Я это вижу, но, скажем так, в случае бизнес-логики. Должно ли это быть применено к обработчикам событий

[20:25] <Энди> да, я вижу

[20:25] <thomfoolery> или вы должны создать свои собственные управляющие структуры для обработки подобных вещей

[20:25] <Andy> лично я бы сделал этот метод для объекта View

[20:25] <Энди>, который при необходимости взаимодействует с моделью

[20:26] <thomfoolery> да, я сделал это, но я чувствую, что представление становится этими «гибридными» вещами

[20:26] <thomfoolery> view + контроллеры

[20:26] <Энди> да, я знаю, что ты имеешь в виду

[20:26] <Энди> ты получаешь действительно толстые взгляды [20:26] <thomfoolery> да

[20:26] <BrianMann>, работающий с добросовестным контроллером, не связывает логику с вашими представлениями, и ваши представления затем управляют только состоянием представления, они реагируют на события уровня DOM и направляют их на контроллеры, которые затем определяют рабочий процесс приложения.

[20:27] <thomfoolery> Мне очень нравится разделение, которое совершает настоящая парадигма MVC

[20:27] <thomfoolery> да, поэтому я часто выбираю создание своих собственных структур управления

[20:27] <BrianMann> Наличие объекта, опосредующего отправку нескольких событий, позволяет управлять состоянием приложения на более высоком уровне.

[20:28] <Andy> Я не использовал это, но я думаю, что http://marionettejs.com/ имеет эту концепцию

[20:28] <Andy> https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.controller.md

[20:28] <thomfoolery> да, разрешите представлению захватывать события пользовательского интерфейса, позволить модели записывать события данных, а затем просто передавать их на ваши собственные контроллеры, когда это будет необходимо

[20:28] <Андрей> Брайан использовал это.

[20:29] <BrianMann> О, да, я большой поклонник марионеток. Я бы не кодировал Backbone без него: P

[20:29] <thomfoolery> Я еще не перешел в марионетку, похоже, для начала нужно много зависимостей

[20:29] <BrianMann> Он предлагает все элементы инфраструктуры, которых у Backbone нет.

[20:29] <BrianMann> Марионетка не имеет никаких зависимостей, она на самом деле состоит из множества меньших независимо функционирующих частей

[20:30] <thomfoolery> я вижу

[20:30] <BrianMann> вы можете использовать одну или несколько фигур, или все

[20:30] <thomfoolery> о, сайт сказал:

[20:30] <thomfoolery> Предварительные условия

[20:30] <thomfoolery> Marionette опирается на Underscore, Backbone, jQuery и другие библиотеки в качестве основы ».

[20:30] <Andy> может быть, нужно потянуть за контроллерный объект, так как он, кажется, только для твоей специфической боли, и затем идти оттуда

[20:30] <BrianMann> верно, это то же самое, от чего зависит Backbone, больше нет

[20:31] <Эндрю> Я подумал, имеет ли смысл лучше познакомиться с ванильным остовом перед тем, как перейти в Марионетку?

[20:31] <thomfoolery> о, я не поняла часть «различные другие библиотеки»

[20:31] <thomfoolery> да, я играл с позвоночником, и мне это нравится

[20:31] <thomfoolery> Я просто еще не перешел в марионетку

[20:31] <BrianMann> Эндрю, он всегда помогает понять, с какими частями Backbone вам помогает Марионетка

[20:31] <Warrdnez> Насколько хорошо работает backbone.js с CMS?

[20:31] <Андрей> Или стоит привыкнуть к использованию «Backbone +» с самого начала?

[20:32] <Warrdnez> друпал или WordPress

[20:32] <thomfoolery> backbone, это интерфейсный фреймворк, который хорошо работает с веб-сервисами REST

[20:32] <Andy> Warrdnez Я полагаю, это зависит от того, как / если CMS может представить JSON API

[20:33] <BrianMann> thomfoolery Andrew I создал несколько бесплатных скринкастов, которые проведут вас через типичные рабочие процессы Backbone, а затем применят Marionette к смеси, как она сокращает шаблон и ускоряет разработку

[20:33] <thomfoolery> да, магистраль позволяет синхронизировать внешние модели данных с их внутренними аналогами

[20:33] <Andy> если вы можете заставить CMS представлять свои данные в спокойной форме, то она должна работать

[20:33] <BrianMann> Marionette — это действительно серия лучших практик и шаблонов, работающих с Backbone в течение длительного периода времени, завернутые в хорошо документированный пакет, в конце дня он остается в стороне и прокладывает путь способ создания действительно потрясающих магистральных приложений

[20:33] <Marcin> Каков наилучший шаблон для авторизации сеанса пользователя по магистрали? Я имею в виду под RESTful бэкэндом

[20:33] <thomfoolery> это не имело бы смысла для WordPress или блога, если бы вы не создавали динамическое приложение для ведения блогов.

[20:34] <thomfoolery> Оаут?

[20:35] <Andy> Мне очень нравится иметь отдельную страницу для входа в систему, которая удаляет куки-файл сессии, который может использовать само приложение JS

[20:35] <Andrew> Энди — я заметил, что в вашем примере приложения Localgram у вас есть файл app.js, который практически ничего не делает, кроме файла router.js. В чем причина разделения?

[20:35] <Andy> Я обнаружил, что управлять всей логикой аутентификации и сеанса на одной странице — значит иметь дело с огромным количеством вещей без особой выгоды

[20:36] <Andy>, а не просто определить роутер в app.js, ты имеешь в виду?

[20:36] <Андрей> верно.

[20:36] <Andy> в более крупном приложении может быть больше настроек и начальной загрузки, что может привести к путанице

[20:37] <Andy> тогда ты смешиваешь модуль маршрутизатора со всем этим

[20:37] <Andrew> А, значит, у вас есть конфигурация в app.js и вы можете отделить маршрутизацию от себя.

[20:37] <Энди> да

[20:40] <Андрей> Я посмотрел страницу паруса, на которую вы ссылались ранее ( http://balderdashy.github.io/sails/)

[20:40] <Marcin> это так — авторизация сессионным cookie не может быть достаточно безопасной, например, стоит проверить Oauth

[20:40] <Andrew> Мне нравится бесплатный JSON API, который они вам дают.

[20:40] <Andy> да, это выглядит красиво

[20:41] <Andy> Я также использовал Rails API на работе, что довольно неплохо https://github.com/rails-api/rails-api

[20:41] <Энди> (хотя я бы выбрал что-то на основе Node, если бы у меня был выбор;)

[20:41] <Andrew> Предпочтительная БД при использовании Node?

[20:42] <Андрей> Я смотрел на MongoDB и ElasticSearch. Монго, кажется, периодически возникают проблемы потери данных.

[20:42] <Энди> Монго или Постгрес в зависимости от того, для чего

[20:43] <Андрей> Спасибо, что уделили мне время, Энди. Я на сегодня, ребята. 🙂

[20:43] <Andy> БД не моя специальность, но в GoCardless мы используем Postgres для данных нашего приложения, mongo для данных, которые мы будем много анализировать, и ElasticSearch для быстрого поиска больших наборов

[20:43] <thomfoolery> Кто-нибудь использовал Elastic Search с Node, я слышал, что это пугающе быстро

[20:43] <Andrew> В настоящее время мы используем его с Rails через Tire.

[20:43] <Andy> пока Андрей

[20:43] <Андрей> Это мило. 🙂

[20:43] <Андрей> Пока!

[20:44] <Andy> то же самое здесь — это очень быстро, но, насколько я могу судить, это не совсем БД общего назначения.

[20:47] <BrianMann> этот чат использует веб-сокеты?

[20:47] <BrianMann> хаха, он использует Backbone, я вижу

[20:47] <thomfoolery> niiiice

[20:47] * Энди открывает веб-инспектор

[20:47] <BrianMann> 0.9.2.

[20:48] <HAWK> Если честно, это всего лишь второй запуск. Намечено больше работы на следующей неделе.

[20:48] <HAWK> Хотя я очень доволен этим.

[20:48] <Энди>, кажется, работает хорошо

[20:48] <BrianMann> да, не могу пожаловаться, я провел некоторое время с Пушером

[20:49] <BrianMann> было действительно легко работать с существующим приложением

[20:54] <HAWK> У кого-нибудь есть еще вопросы по Backbone?

[20:54] <Энди> Ого, время летело!

[20:55] <HAWK> Это всегда так

[20:56] <HAWK> И если никто больше не захочет прыгнуть, я отрежу тебе Энди, чтобы ты мог продолжить свой вечер

[20:56] <BrianMann> о, добрые времена IRC

[20:56] <HAWK> действительно

[20:59] <BrianMann> Хорошо, пока всем

[20:59] <HAWK> Увидимся, BrianMann — спасибо, что заглянули

[20:59] <HAWK> Привет, Энди — большое спасибо за твоё время

[20:59] <Jerry> Спасибо, Энди, Брайан и Хоук

[21:00] <HAWK> Извините, сессия была немного спокойной, но, похоже, это было полезно для нескольких человек.

[21:00] <Энди> нет проблем, поймаем вас всех позже!

[21:00] <thomfoolery> спасибо!