SlideShare une entreprise Scribd logo
1  sur  77
Télécharger pour lire hors ligne
САЛЬНИКОВ СТАНИСЛАВ

KNOCKOUT.js НА ПРИМЕРЕ
2ГИС-ОНЛАЙН
АРХИТЕКТУРА WEB-APP


                  Пользователь



                  2ГИС Онлайн




                 API Справочника




WWW.2GIS.RU
АРХИТЕКТУРА CLIENT-SIDE APP



                              Пользователь



                                 2ГИС Онлайн




   API             API         API              API       API
Транспорта       пробок     <Место для
                          вашего сервиса>
                                            Справочник   Карт   +1

   WWW.2GIS.RU
DOM НА КЛИЕНТЕ




WWW.2GIS.RU
DOM НА КЛИЕНТЕ



 var newDiv = document.createElement('div');
 newDiv.className = 'my-class';
 newDiv.id = 'my-id';
 newDiv.innerHTML = 'Привет, мир!';

 document.body.appendChild(newDiv);



              Привет, мир!
WWW.2GIS.RU
WHERE IS
ШАБЛОНИЗАТОРЫ



    jQueryTemplate
   Mustache
   Underscore.js
   Шаблонизатор резига
   Pure



WWW.2GIS.RU
СОБЫТИЯ

              .firmShort               .firmFull




                           #firmList




WWW.2GIS.RU
СОБЫТИЯ

$("#firmTemplate").tmpl(someData)
.appendTo("#firmList");

$('.firmShort').live({
      click: function() {
        showFirmCard(this);
      }
    });

$('.firmFull').live({
      click: function() {
        hideFirmCard(this);
      }
    });
WWW.2GIS.RU
СОБЫТИЯ




WWW.2GIS.RU
KNOCKOUT




WWW.2GIS.RU
ПОЧЕМУ KNOCKOUT?




              Активно развивается



WWW.2GIS.RU
ПОЧЕМУ KNOCKOUT?



● Активно развивается



          Удобное разделение
           логики и шаблонов


WWW.2GIS.RU
ПОЧЕМУ KNOCKOUT?



● Активно развивается
● Удобное разделение логики и шаблонов

      Функционален, есть
    декларативные биндинги


WWW.2GIS.RU
ПОЧЕМУ KNOCKOUT?



● Активно развивается
● Удобное разделение логики и шаблонов
● Функционален, есть декларативные
  биндинги


    Низкий порог вхождения

WWW.2GIS.RU
MVVM

              UI Logic                       Business Logic



               View                            Model




                         ViewModel

                         Application Logic



WWW.2GIS.RU
MVVM



                           Данные
              ViewModel
                           Вспомогательные
                           функции


                           Связывание данных
                 KO        с отображением




WWW.2GIS.RU
KNOCKOUT




WWW.2GIS.RU
KNOCKOUT


 <div>
     <span data-bind="text: what"></span>,
     <span data-bind="text: where"></span>
 </div>




WWW.2GIS.RU
KO.OBSERVABLE


function vm() {
  this.what = ko.observable('');
}




 WWW.2GIS.RU
KO.OBSERVABLE


function vm() {
  this.what = ko.observable('');
}
ko.applyBindings(new vm());




 WWW.2GIS.RU
KO.OBSERVABLE


function vm() {
  this.what = ko.observable('');
}
ko.applyBindings(new vm());

vm.what(response.what);

<span data-bind="text: what"></span>



 WWW.2GIS.RU
МАССИВЫ




WWW.2GIS.RU
МАССИВЫ


response.result = [
  {
    firmName = 'Завод №1',
    ...
  },
  {
    firmName = 'Завод №2';
    ...
  }
]
 WWW.2GIS.RU
KO.OBSERVABLE_ARRAY


function vm () {
  this.firms = ko.observableArray([]);
}
...
vm.firms(response.result);

<div data-bind="foreach: firms">
  <div data-bind="text: firmName"></div>
</div>


 WWW.2GIS.RU
BINDINGS




WWW.2GIS.RU
BINDINGS


 <div>
     <span data-bind="text: what"></span>,
     <span data-bind="text: where"></span>
 </div>




WWW.2GIS.RU
BINDINGS



- Текст и стиль блока
- Control flow
- Работа с формами
- Шаблонизация
- События
- <место для ваших идей>

WWW.2GIS.RU
BINDINGS

              .firmShort               .firmFull




                           #firmList




WWW.2GIS.RU
BINDINGS


<div id="firmList"
  data-bind="foreach: firms">
  <div class="firmShort"
     data-bind="visible: !isVisible"></div>
  <div class="firmFull"
     data-bind="visible: isVisible"></div>
</div>




 WWW.2GIS.RU
BINDINGS




WWW.2GIS.RU
BINDINGS


data-bind="visible: isVisible,
            click: toggleVisibility"




 WWW.2GIS.RU
BINDINGS


data-bind="visible: isVisible,
            click: toggleVisibility"



toggleVisibility = function() {
    this.isVisible(!this.isVisible());
}




 WWW.2GIS.RU
BINDINGS


ko.bindingHandlers['visible'] = {
    'update': function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable
(valueAccessor());
        var isCurrentlyVisible = !(element.style.display
== "none");
        if (value && !isCurrentlyVisible)
              element.style.display = "";
          else if ((!value) && isCurrentlyVisible)
              element.style.display = "none";
     }
};




WWW.2GIS.RU
BINDINGS


ko.bindingHandlers['animateVisible'] = {
    'update': function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable
(valueAccessor());
        var isCurrentlyVisible = !(element.style.display
== "none");
        var slideSpeed = 200;
        if (value && !isCurrentlyVisible)
         $(element).slideDown(slideSpeed,
callback);
          else if ((!value) && isCurrentlyVisible)
         $(element).slideUp(slideSpeed,
callback);
     }
};

WWW.2GIS.RU
BINDINGS


data-bind="animateVisible: isVisible,
            click: toggleVisibility"



toggleVisibility = function() {
    this.isVisible(!this.isVisible());
}




 WWW.2GIS.RU
BINDINGS


<script type="text/my-tpl" id="firm-tpl">
  // Put yor awesome template here!
</script>




WWW.2GIS.RU
BINDINGS


<script type="text/my-tpl" id="catalog-tpl">

   <div data-bind="template: {
                       name: 'firm-tpl',
                       foreach: firms
                   }"></div>

</script>




WWW.2GIS.RU
BINDING-CONTEXT

                    vm




                                vm.firms[n]




WWW.2GIS.RU
BINDING-CONTEXT




     context === $data




WWW.2GIS.RU
BINDING-CONTEXT




     context === $data
     $data === $context.$data




WWW.2GIS.RU
BINDINGS




 <div class="contacts"
    data-bind="template: {
                 name: 'firm-tpl',
                 data: $data
               }">
   <!-- Some code-->
 </div>




WWW.2GIS.RU
BINDING CONTEXT



                             ●   $data
                             ●   $parent
         $context
                             ●   $parentContext
                             ●   $root
                             ●   $index
                                 $element



WWW.2GIS.RU
BINDINGS


function initBalloon (options) {
    map.createBalloon({
        point: options.point;
        content: options.template
    });
}




WWW.2GIS.RU
BINDINGS


function initBalloon (options) {
    map.createBalloon({
        point: options.point;
        content: options.template
    });

       var container = $('#balloonContent');
       ko.applyBindingsToNode(container , vm);
}




WWW.2GIS.RU
КОГДА МНОГО "ЕСЛИ"




WWW.2GIS.RU
КОГДА МНОГО "ЕСЛИ"


this.hidePreloader = ko.computed(function(){
  return this.firmsLoad() && this.geoLoad();
});




<span id="preloader"
    data-bind="visible: !hidePreloader">
</span>



WWW.2GIS.RU
KO.COMPUTED



       Не наблюдайте один computed
              внутри другого




WWW.2GIS.RU
KO.COMPUTED


1. Не наблюдайте один computed внутри другого


        Не меняйте observable внутри
                 computed




WWW.2GIS.RU
KO.COMPUTED


1. Не наблюдайте один computed внутри другого
2. Не меняйте observable внутри computed


  Используйте computed только там,
        где это необходимо



WWW.2GIS.RU
PLUGINS




WWW.2GIS.RU
PLUGINS




              knockout.address




WWW.2GIS.RU
PLUGINS




WWW.2GIS.RU
PLUGINS




 window.location    vm.myObservable




WWW.2GIS.RU
PLUGINS




 window.location        vm.myObservable


ko.linkObservableToUrl(vm.history, 'history');


WWW.2GIS.RU
PLUGINS




   https://github.com/SteveSanderson/knockout/wiki/Plugins

WWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ




   107             22              18
                 Computed       Observable
 Observable                       Array




WWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ




200+              107           22 18

Functions

WWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ




 13               200+          107
                                      22

                                 18
WWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ

Namespace.ViewModelModules.ourModule = {
  _observables: {
    ourObservable: "",
    ourObservableArray: [],
    ourComputed: function(){}
  },

     _initModule: function(){/*initCode*/},

     someProperty: 100500,

     someFunction: function(){/*fBody*/}
}

    WWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ

Namespace.ViewModelModules.ourModule = {
  _observables: {
    ourObservable: "",
    ourObservableArray: [],
    ourComputed: function(){}
  },

                   150
     _initModule: function(){/*initCode*/},

     someProperty: 100500,

     someFunction: function(){/*fBody*/}
}

    WWW.2GIS.RU
    WWW.2GIS.RU
IDE



data-bind="
  //очень много
  //кода
  //который выглядит
  //как одна сплошная строка
"


WWW.2GIS.RU
IDE




WWW.2GIS.RU
IDE




WWW.2GIS.RU
WWW.2GIS.RU
АНАЛОГИ


    -   AngularJS
    -   Backbone.js
    -   Ember.js
    -   ExtJS
    -   CorMVC
    -   AsanaLuna
    -   ...

WWW.2GIS.RU
ВОПРОСЫ?




WWW.2GIS.RU
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн

Contenu connexe

Tendances

Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 
Quick introduction jQuery
Quick introduction jQueryQuick introduction jQuery
Quick introduction jQueryShalva Usubov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Paul Klimov
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evroneit-people
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020OdessaJS Conf
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 
Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3Technopark
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Ontico
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 

Tendances (20)

Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Quick introduction jQuery
Quick introduction jQueryQuick introduction jQuery
Quick introduction jQuery
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
course js day 4
course js day 4course js day 4
course js day 4
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 
Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3Frontend весна 2014 лекция 3
Frontend весна 2014 лекция 3
 
Avito / SPA Meetup 2
Avito / SPA Meetup 2Avito / SPA Meetup 2
Avito / SPA Meetup 2
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Javascript
JavascriptJavascript
Javascript
 

Similaire à Knockout.JS на примере 2ГИС-Онлайн

DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин ИльяDUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Ильяit-people
 
KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн2ГИС Технологии
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14MoscowJS
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,..."Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...it-people
 
Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"Yandex
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf Conference
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Yii2
Yii2Yii2
Yii2Noveo
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта Olga Pirozhenko
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияIgor Sazonov
 
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript UtilsWP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript UtilsWordCamp Kyiv
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4Technopark
 
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013Dmytro Zharii
 

Similaire à Knockout.JS на примере 2ГИС-Онлайн (20)

DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин ИльяDUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
DUMP-2013 Frontend - Knockoutjs на примере 2ГИС-Онлайн - Таратухин Илья
 
KnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-ОнлайнKnockoutJS на примере 2ГИС-Онлайн
KnockoutJS на примере 2ГИС-Онлайн
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,..."Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
"Гибридное приложение: полгода после релиза" Легчилин Андрей, Парадеев Роман,...
 
Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"Максим Ширшин "SVARX, или Борьба с большими формами"
Максим Ширшин "SVARX, или Борьба с большими формами"
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Yii2
Yii2Yii2
Yii2
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для понимания
 
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript UtilsWP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
WP Kitchen Meetup Spring 2015 - Виктор Кулебякин: WordPress JavaScript Utils
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4
 
External Widgets Performance
External Widgets PerformanceExternal Widgets Performance
External Widgets Performance
 
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
 

Plus de DevDay

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений ТютюевDevDay
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий МузюкинDevDay
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья ПастушковDevDay
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковDevDay
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevDay
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковDevDay
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь КудринDevDay
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил ИльиныхDevDay
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим БерёзкинDevDay
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета АлексеенкоDevDay
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоDevDay
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовDevDay
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя ПономарёвDevDay
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев DevDay
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...DevDay
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел СташевскийDevDay
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья ТаратухинDevDay
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»DevDay
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»DevDay
 

Plus de DevDay (20)

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим Пашук
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий Кожевников
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим Ипполитов
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 

Knockout.JS на примере 2ГИС-Онлайн