SlideShare a Scribd company logo
1 of 21
Twitter Flight
Цитркоп Алексей. Разработчик 7bits.
Надо писать JavaScript
формы
таблицы
таблицы с пагинацией
лоадеры
графики
3
Проблемы
Спагетти код
4
Спагетти код
1 var fnGetSearchForm;
2 var fnGetSearchFormQuery;
3 var fnGetSearcheable;
4 var searcheableSelector;
5 var paginatableSelector;
6 var pagingContainerSelector;
7 var fnGetPaginatable;
8 var fnGetPaginatableContainer;
9 var fnGetPagingInfo;
10 var sortableSelector;
11 var sortableContainerSelector;
12 var fnGetSortingOrder;
13 var fnGetSortableContainer;
14 var fnGetSortableElementsNotBoth;
15 var fnInsertTableRows;
16 var fnGetMetaFieldsCodes;
17 var fnAddColumnsHtml;
18 var sortColumnCode = 'data-sort-code';
19 var tableSelector = '[data-table="true"]';
20 var tableWithMarkableRowsSelector = '[data-
table-with-markable-rows="true"]';
21 var sortableColumnSelector =
sortableContainerSelector + ' thead ' +
sortableSelector;
22 var rowSelectedClass = 'selected-row';
23 var dataRowMarkerAttr = 'data-row-
marker="true"';
24 var checkboxRowMarkerSelector = '[' +
dataRowMarkerAttr + ']';
25 var dataMetaFieldCode = 'data-meta-field-code';
26 var dataFromMetaField = 'data-from';
27 var dataToMetaField = 'data-to';
28 var dataPrimaryMetaField = 'data-primary';
29 var toggleAllInPageSelector = '[data-check-
type="toggle-all-in-page"]:first';
30 var dataTableFilterRowAttributes = 'data-filter-
row-attributes';
31 var dataFilterUrl = 'data-filter-url';
32 var dataTableFilterAdditionalRequestParams =
'data-filter-additional-request-params';
33 var dataTableFilterResponseJsonPart = 'data-
filter-response-json-part';
34 var dataTableRawObjectCode = 'data-object-raw-
code';
35 var mainTable = '[data-main-table="true"]';
36 var searchFormSelector = '[data-search-
component="form"]:first';
37 var editButtonSelector = '.edit-set-btn:first';
38 var dataObjectId = 'data-object-id';
39 ….
5
Решение № 1.
Свой велосипед
придумать правила
рассказать команде
рассказать новичку
написать документацию
написать свой framework
6
Angular
модный
большое комьюнити
много функций
Решение № 2.
7
Angular
используем малый процент функционала
навязывание своей архитектуры
кто-то замечает тормоза
гадит в шаблоны
боль с подлючением jquery плагинов
для single page
8
с Angular
.form-group.row.ng-cloak{:'ng-class' => "(portfolioForm.desired_return.$error.invalid ||
errors.desired_return[0] || portfolioForm.desired_return.$error.min ||
portfolioForm.desired_return.$error.max) ? 'has-error' : ''", 'ng-if' => "portfolio.algorithm
== 'algorithm_name'"}
%label.control-label.col-xs-12.col-sm-3.no-padding-right{:for => "form-field-2"}
Desired return:
.col-xs-12.col-sm-9
.clearfix
%input{'integer-validation' => "", :max => '99', :min => '1', :'required' => "", :type =>
"number", :id => "form-field-2", :class => "col-xs-4 col-sm-2", :step => "any", :'ng-model' =>
'portfolio.desired_return', :'name' => 'desired_return'}
%span.help-button{:popover => "{}", :'data-rel' => "popover", :'data-trigger' => "hover",
:'data-placement' => "right", :'data-content' => "help text", :title => "", :'data-original-
title' => '' }?
9
без Angular
.form-group.row.js-field-wrap.js-desired-return-wrap
%label.control-label.col-xs-12.col-sm-3.no-padding-right{:for => "form-field-2"}
Desired return:
.col-xs-12.col-sm-9
.clearfix
%input{ :type => "text", :id => "form-field-2", :class => "col-xs-4 col-sm-2", :'name' =>
'desired_return'}
%span.help-button{:popover => "{}", :'data-rel' => "popover", :'data-trigger' => "hover",
:'data-placement'=>"right", :'data-content' => "help text", :title=> "", :'data-original-title'
=>'' }?
.help-inline-block.col-xs-12.col-sm-reset.js-field-error.js-desired_return-error-wrap
10
Решение № 3.
Twitter Flight
легкий ( 5кб )
не навязывает свою архитектуру
низкий порог вхождения
event-based
11
Философия
компоненты
миксины
12
Компоненты
независимы
общаются исключительно событиями
набор атрибутов
набор функций
13
1 window.formComponentUI = flight.component(
2 function() {
3 this.defaultAttrs({
4 errorFieldSelector: '.js-field-error'
5 });
6 this.showErrors = function(formErrors) {
7 var that = this;
8 for (var name in formErrors) {
9 that.$node.find('.js-' + name + '-error').html(formErrors[name]);
10 }
11 };
12 this.hideErrors = function() {
13 this.select('errorFieldSelector').empty();
14 };
15 this.after('initialize', function() {
16 this.on('submit-done', this.hideErrors);
17 this.on('submit-form', this.hideErrors);
18 this.on('submit-error', function(e, v){
19 this.showErrors(v);
20 });
21 });
22 })
Компоненты
14
1 window.formComponents = flight.component(
2 window.loaderMixin,
3 window.showErrorsMixin,
4 window.formMixin,
5
6 function() {
7 this.after('initialize', function() {
8 this.on("form-load-data", this.showLoader);
9 this.on("form-load-data-done", this.hideLoader);
10 this.on("form-load-data-error", this.showErrors)
11 this.on("show-errors-done", this.hideLoader)
12 });
13 });
Компоненты
15
1 $(function() {
2 window.formComponentData.attachTo('.js-form');
3 window.formComponentUI.attachTo('.js-form');
4 window.relaodPageFormComponentUI.attachTo('.js-form-reload-page');
5 window.popupWindowComponentUI.attachTo('.js-popup-window');
6 window.messageInsteadFormComponentUI.attachTo('.js-show-message');
7 });
Компоненты
16
Миксины
утилитные методы
расширение компонентов
17
1 window.loadTableMixin = function() {
2 this.defaultAttrs({
3 tableSelector: '.table',
4 });
5
6 this.getPageTableData = function(url) {
7 var that = this;
8 $.getJSON(url, function(data) {
9 that.trigger('table-data-load-done', data);
10 });
11 };
12 };
Миксины
18
Файлы
до: после:
19
Выводы
подходит для стандартных задач
нет четких правил
низкий порог вхождения
20
flightjs.github.io
github.com/flightjs/flight
Спасибо за внимание

More Related Content

What's hot

Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеровMedia Gorod
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капляmeet_magento
 
Построение индексов Redis
Построение индексов RedisПостроение индексов Redis
Построение индексов RedisPetr Trofimov
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)Roman Brovko
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...Viktor Likin
 

What's hot (7)

Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеров
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капля
 
Построение индексов Redis
Построение индексов RedisПостроение индексов Redis
Построение индексов Redis
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
 

Viewers also liked

Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про GenericsКурс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics7bits
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда7bits
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий7bits
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточностьКурс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточность7bits
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения7bits
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции7bits
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.7bits
 
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...7bits
 
Курс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. SpringКурс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. Spring7bits
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...7bits
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven7bits
 
Курс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBCКурс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBC7bits
 
Курс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSPКурс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSP7bits
 
Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mockКурс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mock7bits
 
Спецкурс 2014, занятие 5 (часть 1). Исключения и логи
Спецкурс 2014, занятие 5 (часть 1). Исключения и логиСпецкурс 2014, занятие 5 (часть 1). Исключения и логи
Спецкурс 2014, занятие 5 (часть 1). Исключения и логи7bits
 
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документированиеСтажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование7bits
 
Стажировка-2014, занятие 9. Code conventions and best practices
Стажировка-2014, занятие 9. Code conventions and best practicesСтажировка-2014, занятие 9. Code conventions and best practices
Стажировка-2014, занятие 9. Code conventions and best practices7bits
 
Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.
Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.
Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.7bits
 
Спецкурс 2014, занятие 10. Lean startup
Спецкурс 2014, занятие 10. Lean startupСпецкурс 2014, занятие 10. Lean startup
Спецкурс 2014, занятие 10. Lean startup7bits
 
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайнСтажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн7bits
 

Viewers also liked (20)

Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про GenericsКурс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточностьКурс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточность
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
 
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
 
Курс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. SpringКурс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. Spring
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
Курс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBCКурс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBC
 
Курс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSPКурс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSP
 
Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mockКурс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mock
 
Спецкурс 2014, занятие 5 (часть 1). Исключения и логи
Спецкурс 2014, занятие 5 (часть 1). Исключения и логиСпецкурс 2014, занятие 5 (часть 1). Исключения и логи
Спецкурс 2014, занятие 5 (часть 1). Исключения и логи
 
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документированиеСтажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
Стажировка-2015. Разработка. Занятие 8. Абстракции, именование,документирование
 
Стажировка-2014, занятие 9. Code conventions and best practices
Стажировка-2014, занятие 9. Code conventions and best practicesСтажировка-2014, занятие 9. Code conventions and best practices
Стажировка-2014, занятие 9. Code conventions and best practices
 
Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.
Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.
Стажировка-2015. Разработка. Занятие 1. Основы языков разметки.
 
Спецкурс 2014, занятие 10. Lean startup
Спецкурс 2014, занятие 10. Lean startupСпецкурс 2014, занятие 10. Lean startup
Спецкурс 2014, занятие 10. Lean startup
 
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайнСтажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн
Стажировка 2015. Дизайн. Занятие 5. Адаптивный web-дизайн
 

Similar to Стажировка-2015. Разработка. Занятие 14. Twitter Flight

Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
Новая eCommerce платформа D7: скидки, управление заказами, автоматизация
Новая eCommerce платформа D7:  скидки, управление заказами, автоматизацияНовая eCommerce платформа D7:  скидки, управление заказами, автоматизация
Новая eCommerce платформа D7: скидки, управление заказами, автоматизация1С-Битрикс
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.DrupalCampDN
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customersaheadWorks
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Stepan Tanasiychuk
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 

Similar to Стажировка-2015. Разработка. Занятие 14. Twitter Flight (14)

Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кодаSECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Новая eCommerce платформа D7: скидки, управление заказами, автоматизация
Новая eCommerce платформа D7:  скидки, управление заказами, автоматизацияНовая eCommerce платформа D7:  скидки, управление заказами, автоматизация
Новая eCommerce платформа D7: скидки, управление заказами, автоматизация
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customers
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 

More from 7bits

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? 7bits
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофтаГудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта7bits
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакатьГудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать7bits
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи 7bits
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE 7bits
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в ITGoodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT7bits
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web7bits
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод7bits
 
Курс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и JavaКурс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и Java7bits
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHubКурс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub7bits
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологиюКурс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологию7bits
 
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...7bits
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложенийСтажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.7bits
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты7bits
 
Стажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEMСтажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEM7bits
 

More from 7bits (16)

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофтаГудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакатьГудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в ITGoodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
Курс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и JavaКурс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и Java
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHubКурс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологиюКурс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологию
 
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложенийСтажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
 
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
 
Стажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEMСтажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEM
 

Стажировка-2015. Разработка. Занятие 14. Twitter Flight

  • 1.
  • 2. Twitter Flight Цитркоп Алексей. Разработчик 7bits.
  • 3. Надо писать JavaScript формы таблицы таблицы с пагинацией лоадеры графики 3
  • 5. Спагетти код 1 var fnGetSearchForm; 2 var fnGetSearchFormQuery; 3 var fnGetSearcheable; 4 var searcheableSelector; 5 var paginatableSelector; 6 var pagingContainerSelector; 7 var fnGetPaginatable; 8 var fnGetPaginatableContainer; 9 var fnGetPagingInfo; 10 var sortableSelector; 11 var sortableContainerSelector; 12 var fnGetSortingOrder; 13 var fnGetSortableContainer; 14 var fnGetSortableElementsNotBoth; 15 var fnInsertTableRows; 16 var fnGetMetaFieldsCodes; 17 var fnAddColumnsHtml; 18 var sortColumnCode = 'data-sort-code'; 19 var tableSelector = '[data-table="true"]'; 20 var tableWithMarkableRowsSelector = '[data- table-with-markable-rows="true"]'; 21 var sortableColumnSelector = sortableContainerSelector + ' thead ' + sortableSelector; 22 var rowSelectedClass = 'selected-row'; 23 var dataRowMarkerAttr = 'data-row- marker="true"'; 24 var checkboxRowMarkerSelector = '[' + dataRowMarkerAttr + ']'; 25 var dataMetaFieldCode = 'data-meta-field-code'; 26 var dataFromMetaField = 'data-from'; 27 var dataToMetaField = 'data-to'; 28 var dataPrimaryMetaField = 'data-primary'; 29 var toggleAllInPageSelector = '[data-check- type="toggle-all-in-page"]:first'; 30 var dataTableFilterRowAttributes = 'data-filter- row-attributes'; 31 var dataFilterUrl = 'data-filter-url'; 32 var dataTableFilterAdditionalRequestParams = 'data-filter-additional-request-params'; 33 var dataTableFilterResponseJsonPart = 'data- filter-response-json-part'; 34 var dataTableRawObjectCode = 'data-object-raw- code'; 35 var mainTable = '[data-main-table="true"]'; 36 var searchFormSelector = '[data-search- component="form"]:first'; 37 var editButtonSelector = '.edit-set-btn:first'; 38 var dataObjectId = 'data-object-id'; 39 …. 5
  • 6. Решение № 1. Свой велосипед придумать правила рассказать команде рассказать новичку написать документацию написать свой framework 6
  • 8. Angular используем малый процент функционала навязывание своей архитектуры кто-то замечает тормоза гадит в шаблоны боль с подлючением jquery плагинов для single page 8
  • 9. с Angular .form-group.row.ng-cloak{:'ng-class' => "(portfolioForm.desired_return.$error.invalid || errors.desired_return[0] || portfolioForm.desired_return.$error.min || portfolioForm.desired_return.$error.max) ? 'has-error' : ''", 'ng-if' => "portfolio.algorithm == 'algorithm_name'"} %label.control-label.col-xs-12.col-sm-3.no-padding-right{:for => "form-field-2"} Desired return: .col-xs-12.col-sm-9 .clearfix %input{'integer-validation' => "", :max => '99', :min => '1', :'required' => "", :type => "number", :id => "form-field-2", :class => "col-xs-4 col-sm-2", :step => "any", :'ng-model' => 'portfolio.desired_return', :'name' => 'desired_return'} %span.help-button{:popover => "{}", :'data-rel' => "popover", :'data-trigger' => "hover", :'data-placement' => "right", :'data-content' => "help text", :title => "", :'data-original- title' => '' }? 9
  • 10. без Angular .form-group.row.js-field-wrap.js-desired-return-wrap %label.control-label.col-xs-12.col-sm-3.no-padding-right{:for => "form-field-2"} Desired return: .col-xs-12.col-sm-9 .clearfix %input{ :type => "text", :id => "form-field-2", :class => "col-xs-4 col-sm-2", :'name' => 'desired_return'} %span.help-button{:popover => "{}", :'data-rel' => "popover", :'data-trigger' => "hover", :'data-placement'=>"right", :'data-content' => "help text", :title=> "", :'data-original-title' =>'' }? .help-inline-block.col-xs-12.col-sm-reset.js-field-error.js-desired_return-error-wrap 10
  • 11. Решение № 3. Twitter Flight легкий ( 5кб ) не навязывает свою архитектуру низкий порог вхождения event-based 11
  • 14. 1 window.formComponentUI = flight.component( 2 function() { 3 this.defaultAttrs({ 4 errorFieldSelector: '.js-field-error' 5 }); 6 this.showErrors = function(formErrors) { 7 var that = this; 8 for (var name in formErrors) { 9 that.$node.find('.js-' + name + '-error').html(formErrors[name]); 10 } 11 }; 12 this.hideErrors = function() { 13 this.select('errorFieldSelector').empty(); 14 }; 15 this.after('initialize', function() { 16 this.on('submit-done', this.hideErrors); 17 this.on('submit-form', this.hideErrors); 18 this.on('submit-error', function(e, v){ 19 this.showErrors(v); 20 }); 21 }); 22 }) Компоненты 14
  • 15. 1 window.formComponents = flight.component( 2 window.loaderMixin, 3 window.showErrorsMixin, 4 window.formMixin, 5 6 function() { 7 this.after('initialize', function() { 8 this.on("form-load-data", this.showLoader); 9 this.on("form-load-data-done", this.hideLoader); 10 this.on("form-load-data-error", this.showErrors) 11 this.on("show-errors-done", this.hideLoader) 12 }); 13 }); Компоненты 15
  • 16. 1 $(function() { 2 window.formComponentData.attachTo('.js-form'); 3 window.formComponentUI.attachTo('.js-form'); 4 window.relaodPageFormComponentUI.attachTo('.js-form-reload-page'); 5 window.popupWindowComponentUI.attachTo('.js-popup-window'); 6 window.messageInsteadFormComponentUI.attachTo('.js-show-message'); 7 }); Компоненты 16
  • 18. 1 window.loadTableMixin = function() { 2 this.defaultAttrs({ 3 tableSelector: '.table', 4 }); 5 6 this.getPageTableData = function(url) { 7 var that = this; 8 $.getJSON(url, function(data) { 9 that.trigger('table-data-load-done', data); 10 }); 11 }; 12 }; Миксины 18
  • 20. Выводы подходит для стандартных задач нет четких правил низкий порог вхождения 20