SlideShare una empresa de Scribd logo
1 de 87
Descargar para leer sin conexión
Спикер
dump 2013
Пользователь
2ГИС Онлайн
API Справочника
АРХИТЕКТУРА WEB-APP
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 = 'Привет, мир!';
$('#container').appendChild(newDiv);
Привет, мир!
WWW.2GIS.RU
WHERE IS
ШАБЛОНИЗАТОРЫ
jQueryTemplate
Mustache
Underscore.js
Шаблонизатор резига
Pure
WWW.2GIS.RUWWW.2GIS.RU
СОБЫТИЯ
.firmFull
WWW.2GIS.RUWWW.2GIS.RU
.firmShort
#firmList
СОБЫТИЯ
$("#firmTemplate").tmpl(someData)
.appendTo("#firmList");
$('.firmShort').live({
click: function() {
showFirmCard(this);
}
});
$('.firmFull').live({
click: function() {
hideFirmCard(this);
}
});
WWW.2GIS.RUWWW.2GIS.RU
СОБЫТИЯ
ПОЧЕМУ KNOCKOUT?
Активно развивается
WWW.2GIS.RUWWW.2GIS.RU
● Активно развивается
ПОЧЕМУ KNOCKOUT?
Удобное разделение
логики и шаблонов
WWW.2GIS.RUWWW.2GIS.RU
● Активно развивается
● Удобное разделение логики и шаблонов
ПОЧЕМУ KNOCKOUT?
Функционален, есть
декларативные биндинги
WWW.2GIS.RUWWW.2GIS.RU
● Активно развивается
● Удобное разделение логики и шаблонов
● Функционален, есть декларативные
биндинги
ПОЧЕМУ KNOCKOUT?
Низкий порог вхождения
WWW.2GIS.RUWWW.2GIS.RU
MVVM
View Model
ViewModel
UI Logic Business Logic
Application Logic
WWW.2GIS.RUWWW.2GIS.RU
KNOCKOUT
WWW.2GIS.RUWWW.2GIS.RU
<div class="dg-search-result-header">
<span data-bind="text: what_text"></span>,
<span data-bind="text: where_text"></span>
</div>
KNOCKOUT
WWW.2GIS.RUWWW.2GIS.RU
function vm() {
this.what_text = ko.observable('');
}
ko.applyBindings(new vm());
...
vm.what_text(response.what);
<span data-bind="text: what_text"></span>
KO.OBSERVABLE
WWW.2GIS.RUWWW.2GIS.RU
МАССИВЫ
WWW.2GIS.RUWWW.2GIS.RU
response.result = [
{
firmName = 'Музей №1',
...
},
{
firmName = 'Музей №2';
...
}
]
МАССИВЫ
WWW.2GIS.RUWWW.2GIS.RU
function vm () {
this.firms = ko.observableArray([]);
}
...
vm.firms(response.result);
<div data-bind="foreach: firms">
<div data-bind="text: firmName"></div>
</div>
KO.OBSERVABLE_ARRAY
WWW.2GIS.RUWWW.2GIS.RU
BINDINGS
<div class="dg-search-result-header">
<span data-bind="text: what_text"></span>,
<span data-bind="text: where_text"></span>
</div>
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
BINDINGS
— Текст и стиль блока
— Control flow
— Работа с формами
— Шаблонизация
— <место для ваших идей>
WWW.2GIS.RUWWW.2GIS.RU
.firmFull
WWW.2GIS.RUWWW.2GIS.RU
.firmShort
#firmList
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>
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
data-bind="visible: isVisible,
click: toggleVisibility"
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
data-bind="visible: isVisible,
click: toggleVisibility"
toggleVisibility = function() {
this.isVisible(!this.isVisible());
}
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
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";
}
};
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
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);
}
};
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
data-bind="animateVisible: isVisible,
click: toggleVisibility"
toggleVisibility = function() {
this.isVisible(!this.isVisible());
}
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
<script type="text/my-tpl" id="firm-tpl">
//firm template code
</script>
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
<script type="text/my-tpl" id="catalog-tpl">
//some template code
<div data-bind="template: {
name: 'firm-tpl',
foreach: firms
}"></div>
</script>
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
BINDINGS
BINDING-CONTEXT
vm
vm.firms[n]
WWW.2GIS.RUWWW.2GIS.RU
ПЕЧАТЬ
WWW.2GIS.RUWWW.2GIS.RU
<script type="text/my-tpl" id="print-tpl">
//some template code
<div data-bind="template: {
name: 'firm-tpl',
foreach: firms,
templateOptions: {
isPrint: 1
}
}"></div>
</script>
ПЕЧАТЬ
WWW.2GIS.RUWWW.2GIS.RU
BINDINGS
<div class="phone-number"
data-bind="visible: $context.isPrint)"
>
<!-- Some code-->
</div>
WWW.2GIS.RUWWW.2GIS.RU
BINDINGS
<div class="contacts"
data-bind="template: {
name: 'firm-tpl',
data: $data,
templateOptions: {
isPrint: $context.isPrint
}
}">
<!-- Some code-->
</div>
WWW.2GIS.RUWWW.2GIS.RU
$context
$data
templateOptions
BINDING CONTEXT
WWW.2GIS.RUWWW.2GIS.RU
BINDING CONTEXT
● $parent
● $parentContext
● $root
● $index
● $element
WWW.2GIS.RUWWW.2GIS.RU
$context
$data
templateOptions
function initBalloon (options) {
map.createBalloon({
point: options.point;
content: options.template
});
}
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
function initBalloon (options) {
map.createBalloon({
point: options.point;
content: options.template
});
var container = $('#balloonContent');
ko.applyBindingsToNode(container , vm);
}
BINDINGS
WWW.2GIS.RUWWW.2GIS.RU
КОГДА МНОГО "ЕСЛИ"
WWW.2GIS.RUWWW.2GIS.RU
this.showPreloader = ko.computed(function(){
return this.firmsLoad() && this.geoLoad();
});
<span id="preloader"
data-bind="visible: showPreloader">
</span>
КОГДА МНОГО "ЕСЛИ"
WWW.2GIS.RUWWW.2GIS.RU
Не наблюдайте один computed
внутри другого
KO.COMPUTED
WWW.2GIS.RUWWW.2GIS.RU
WWW.2GIS.RU
1. Не наблюдайте один computed внутри другого
KO.COMPUTED
Не меняйте observable внутри
computed
WWW.2GIS.RUWWW.2GIS.RUWWW.2GIS.RU
WWW.2GIS.RU
1. Не наблюдайте один computed внутри другого
2. Не меняйте observable внутри computed
KO.COMPUTED
Используйте computed только там,
где это необходимо
WWW.2GIS.RUWWW.2GIS.RU
PLUGINS
PLUGINS
knockout.address
WWW.2GIS.RUWWW.2GIS.RU
PLUGINS
window.location vm.myObservable
ko.linkObservableToUrl(vm.history, 'history');
WWW.2GIS.RUWWW.2GIS.RU
knockout.address
PLUGINS
WWW.2GIS.RUWWW.2GIS.RU
$('#firmFull').dataBind({
animateVisible: isVisible,
click: toggleVisibility
});
https://gist.github.com/joelnet/1006808
PLUGINS
WWW.2GIS.RUWWW.2GIS.RU
Unobtrusive Knockout
support library for jQuery
Joel Thoms
https://github.com/SteveSanderson/knockout/wiki/Plugins
PLUGINS
WWW.2GIS.RUWWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ
107 22 18
Observable Computed Observable
Array
WWW.2GIS.RUWWW.2GIS.RU
Functions
БОЛЬШИЕ ПРОЕКТЫ
200+ 107 22 18
WWW.2GIS.RUWWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ
18
WWW.2GIS.RUWWW.2GIS.RU
107200+13 22
Namespace.ViewModelModules.<ourModule> = {
_observables: {
<ourObservable>: <defaultData>,
<ourComputed>: function()
{/*computedCode*/}
},
<someProperty>: 100500,
_initModule: function(){/*initCode*/},
<function>: function(){/*fBody*/}
}
БОЛЬШИЕ ПРОЕКТЫ
WWW.2GIS.RUWWW.2GIS.RU
Namespace.ViewModelModules.<ourModule> = {
_observables: {
<ourObservable>: <defaultData>,
<ourComputed>: function()
{/*computedCode*/}
},
<someProperty>: 100500,
_initModule: function(){/*initCode*/},
<function>: function(){/*fBody*/}
}
WWW.2GIS.RU
БОЛЬШИЕ ПРОЕКТЫ
150
WWW.2GIS.RUWWW.2GIS.RU
https://github.com/2gis/dgKoModulizer
dgKoModulizer
WWW.2GIS.RUWWW.2GIS.RU
IDE
data-bind="
//очень много
//кода
//который выглядит
//как одна сплошная строка
"
WWW.2GIS.RUWWW.2GIS.RU
IDE
WWW.2GIS.RUWWW.2GIS.RU
IDE
WWW.2GIS.RUWWW.2GIS.RU
ПРОИЗВОДИТЕЛЬНОСТЬ
WWW.2GIS.RUWWW.2GIS.RU
DOM.Build()
АНАЛОГИ
— AngularJS
— Backbone.js
— Ember.js
— ExtJS
— CorMVC
— AsanaLuna
— ...
WWW.2GIS.RUWWW.2GIS.RU
Илья Таратухин
@darklifa

Más contenido relacionado

La actualidad más candente

Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Paul Klimov
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2Paul Klimov
 
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
 
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS) Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS) COMAQA.BY
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаprivate_face
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Ontico
 
Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Dmytro Olaresko
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейKonstantin Komelin
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2Alexander Makarov
 
API Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классAPI Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классYandex.Maps
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
 
Профилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кодаПрофилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кодаprivate_face
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressRuslan Begaliev
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
сервисы в Angular js
сервисы в Angular jsсервисы в Angular js
сервисы в Angular jsyakimchuk
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evroneit-people
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 

La actualidad más candente (20)

Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2Продвинутое использование ActiveRecord в Yii2
Продвинутое использование ActiveRecord в Yii2
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
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)
 
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS) Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
 
Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
 
API Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-классAPI Яндекс.Карт. Мастер-класс
API Яндекс.Карт. Мастер-класс
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Профилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кодаПрофилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кода
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
сервисы в Angular js
сервисы в Angular jsсервисы в Angular js
сервисы в Angular js
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 

Destacado

Top 8 Tourist Attractions In Rio De Janeiro
Top 8 Tourist Attractions In Rio De JaneiroTop 8 Tourist Attractions In Rio De Janeiro
Top 8 Tourist Attractions In Rio De Janeiroarmidatrentino
 
Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...
Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...
Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...Julien Martret
 
Vicente Huidobro y el creacionismo
Vicente Huidobro y el creacionismoVicente Huidobro y el creacionismo
Vicente Huidobro y el creacionismoJesús Magaña
 
ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6Siripoom Songkitrat
 

Destacado (6)

00020284
0002028400020284
00020284
 
Top 8 Tourist Attractions In Rio De Janeiro
Top 8 Tourist Attractions In Rio De JaneiroTop 8 Tourist Attractions In Rio De Janeiro
Top 8 Tourist Attractions In Rio De Janeiro
 
Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...
Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...
Rapport de développement durable de la Région Aquitaine Limousin Poitou-Chare...
 
The politics and specifics of Knowledge-based economy implementation in Hong ...
The politics and specifics of Knowledge-based economy implementation in Hong ...The politics and specifics of Knowledge-based economy implementation in Hong ...
The politics and specifics of Knowledge-based economy implementation in Hong ...
 
Vicente Huidobro y el creacionismo
Vicente Huidobro y el creacionismoVicente Huidobro y el creacionismo
Vicente Huidobro y el creacionismo
 
ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6
 

Similar a KnockoutJS на примере 2ГИС-Онлайн

Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
Yii2
Yii2Yii2
Yii2Noveo
 
Secr презентация гардиенков
Secr презентация гардиенковSecr презентация гардиенков
Secr презентация гардиенковLuxoftTraining
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта Olga Pirozhenko
 
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
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
ReTag - Презентация
ReTag - ПрезентацияReTag - Презентация
ReTag - ПрезентацияAlexander Bachmann
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Sergey Biryukov
 
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013Dmytro Zharii
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Транслируем.бел
 

Similar a KnockoutJS на примере 2ГИС-Онлайн (20)

Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Angular js
Angular jsAngular js
Angular js
 
Yii2
Yii2Yii2
Yii2
 
Secr презентация гардиенков
Secr презентация гардиенковSecr презентация гардиенков
Secr презентация гардиенков
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
External Widgets Performance
External Widgets PerformanceExternal Widgets Performance
External Widgets Performance
 
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
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
ReTag - Презентация
ReTag - ПрезентацияReTag - Презентация
ReTag - Презентация
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015Looking into WordPress Core, WordCamp Russia 2015
Looking into WordPress Core, WordCamp Russia 2015
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Ci
CiCi
Ci
 
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
 
За пределами PageObject
За пределами PageObjectЗа пределами PageObject
За пределами PageObject
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
 

KnockoutJS на примере 2ГИС-Онлайн