SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Введение в MVVM на примере
Knockout для JavaScript разработчиков

               Докладчик:
               Андрей Найденко
               .NET разработчик
               twitter: Andrii_Naidenko
               facebook: Andrii.Naidenko
Knockout – бесплатная JavaScript
библиотека с открытым кодом для
разработки богатых веб-приложений
с отзывчивым интерфейсом и
прозрачной моделью данных.
$('#left-handle-position').change(function (e)
                                                           {
                                                               var rightValue = $('.slider-range').slider('values', 1);
                                                               var newLeftValue = Math.min($(this).val(), rightValue);
                                                               $sliderRange.slider('values', 0, $(this).val());
                                                           });

                                                           $('#right-handle-position').change(function (e)
                                                           {
                                                               var leftValue = $('.slider-range').slider('values', 0);
                                                               var newRightValue = Math.max($(this).val(), leftValue);
                                                               $sliderRange.slider('values', 1, newRightValue);
$('.slider-range').slider({                                });
    range: true,
    slide: function (event, ui)
    {
       $('#left-handle-position').val(ui.values[0]);
       $sliderValues.find('.left-handle-value').text(ui.values[0]);
       var $statistics = $('.statistics');
       $statistics.find('.min').text(MyMath.min(values, sliderValues));
       $statistics.find('.median').text(MyMath.median(values, sliderValues));
       // ...
    }
});
Верстальщик
                                                                                                (недоумевает,
                                                                                              девелопер ломает
Программист                                    Тестировщик                                         верстку)
(устал, безнадежно                            (утомленный, скучает,
   фиксает баги,                                  ждет фиксов)
 и днем, и ночью)




                             Менеджер                                     Заказчик
                     (думает, что делать и кто виноват)               (недоволен качеством)
var ViewModel = function (chartData)
                                                        {
                                                          this.dataValues = ko.observableArray(chartData);
                                                          this.leftHandleValue = ko.observable(0);
                                                          this.rightHandleValue = ko.observable(chartData.length - 1);

                                                             this.sliderRangeSelected = ko.computed(function () {
                                                               return [this.leftHandleValue(), this.rightHandleValue()];
                                                             }, this);

                                                             this.min = ko.computed(function () {
                                                               return MyMath.min(this.dataValues(), this.sliderRangeSelected());
                                                             }, this);

                                                             this.median = ko.computed(function () {
var chartData = loadChartData();                               return MyMath.median(this.dataValues(), this.sliderRangeSelected());
var viewModel = new ViewModel(chartData);                    }, this);
ko.applyBindings(viewModel);
                                                        };


 <div class="slider-range" data-bind="jqueryui: { widget: 'slider', options: { values: this.sliderRangeSelected() }}"></div>
 <div>Min: <span class="min" data-bind="text: min"></span></div>
 <div>Max: <span class="max" data-bind="text: max"></span></div>
Ключевые концепции



    Декларативная привязка            Автоматическое обновление UI
    Ассоциация DOM элементов              При изменении view модели,
     с view моделью в разметке           UI обновляется автоматически,
                                                  и наоборот




  Отслеживание зависимостей                    Шаблонизация
 Автоматически отслеживает цепочки   Позволяет строить богатый интерфейс с
    зависимостей во view модели           использованием шаблонов,
                                       отслеживает вложенные шаблоны
Встроенные привязки
                (bindings):
Декларативная
  привязка      •Управления текстом и внешним видом:
                visible, text, html, css, style, attr


                •Управления логикой представления:
                foreach, if, ifnot, with


                •Работы с полями формы:
                click, event, submit, enable, disable, value, hasfocus, checked,
                options, selectedOptions, uniqueName
Шаблон MVVM (Model-View-ViewModel)




View: интерактивный UI, основанный на view модели.

View Model: плоский объект, представляющий данные и операции на UI.
Например, для реализации редактора списка, Ваша view модель будет
представлена объектом со списком элементов и методов по их
добавлению/удалению в список.

Model: . Прикладная логика, которая описывает объекты предметной области и
операции над ними. Модель не зависит от UI.
Особенности
• Бесплатный, с открытыми исходниками
  MIT лицензия

• Чистый JavaScript
  Работает с любым веб-фреймворком

• Легковесный
  39кб сжатая, 13кб с HTTP сжатием

• Нет зависимостей
• Поддерживает все мейнстрим браузеры:
  IE 6+, Firefox 2+, Chrome, Opera, Safari (desktop/mobile)

• Полная документация:
  API, живые примеры, интерактивные учебники
Преимущества:
-Полная автономность
-Автоматическое отслеживание зависимостей,
обновление UI
-Прозрачная архитектура
-Повышенная тестируемость
-Очень низкий порог вхождения

Недостатки:
-Нет поддержки SEO
Домашняя страница:
http://knockoutjs.com/

Исходный код:
https://github.com/SteveSanderson/knockout

Ресурсы:
http://www.knockmeout.net/
http://blog.stevesanderson.com
http://groups.google.com/group/knockoutjs
http://en.wikipedia.org/wiki/Model_View_ViewMode
l

Weitere ähnliche Inhalte

Ähnlich wie Introduction to KnockoutJs

Observable как атом приложения
Observable как атом приложенияObservable как атом приложения
Observable как атом приложенияArtem Bey
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsMax Klymyshyn
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)GoSharp
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья ДемидовDataArt
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS developmentIvan Trifonov
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""OdessaJS Conf
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1Eduard Antsupov
 
Kirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхKirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхDneprCiklumEvents
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхKirill Zotin
 
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Ontico
 

Ähnlich wie Introduction to KnockoutJs (20)

Observable как атом приложения
Observable как атом приложенияObservable как атом приложения
Observable как атом приложения
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.js
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
«Custom View. Делаем быстро, красиво, чисто». Илья Демидов
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
Scala for android
Scala for androidScala for android
Scala for android
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
MongoDB@addconf
MongoDB@addconfMongoDB@addconf
MongoDB@addconf
 
MWWM
MWWMMWWM
MWWM
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Расширение библиотеки Slick
Расширение библиотеки SlickРасширение библиотеки Slick
Расширение библиотеки Slick
 
Kirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхKirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталях
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталях
 
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)
 

Introduction to KnockoutJs

  • 1. Введение в MVVM на примере Knockout для JavaScript разработчиков Докладчик: Андрей Найденко .NET разработчик twitter: Andrii_Naidenko facebook: Andrii.Naidenko
  • 2. Knockout – бесплатная JavaScript библиотека с открытым кодом для разработки богатых веб-приложений с отзывчивым интерфейсом и прозрачной моделью данных.
  • 3.
  • 4. $('#left-handle-position').change(function (e) { var rightValue = $('.slider-range').slider('values', 1); var newLeftValue = Math.min($(this).val(), rightValue); $sliderRange.slider('values', 0, $(this).val()); }); $('#right-handle-position').change(function (e) { var leftValue = $('.slider-range').slider('values', 0); var newRightValue = Math.max($(this).val(), leftValue); $sliderRange.slider('values', 1, newRightValue); $('.slider-range').slider({ }); range: true, slide: function (event, ui) { $('#left-handle-position').val(ui.values[0]); $sliderValues.find('.left-handle-value').text(ui.values[0]); var $statistics = $('.statistics'); $statistics.find('.min').text(MyMath.min(values, sliderValues)); $statistics.find('.median').text(MyMath.median(values, sliderValues)); // ... } });
  • 5.
  • 6. Верстальщик (недоумевает, девелопер ломает Программист Тестировщик верстку) (устал, безнадежно (утомленный, скучает, фиксает баги, ждет фиксов) и днем, и ночью) Менеджер Заказчик (думает, что делать и кто виноват) (недоволен качеством)
  • 7. var ViewModel = function (chartData) { this.dataValues = ko.observableArray(chartData); this.leftHandleValue = ko.observable(0); this.rightHandleValue = ko.observable(chartData.length - 1); this.sliderRangeSelected = ko.computed(function () { return [this.leftHandleValue(), this.rightHandleValue()]; }, this); this.min = ko.computed(function () { return MyMath.min(this.dataValues(), this.sliderRangeSelected()); }, this); this.median = ko.computed(function () { var chartData = loadChartData(); return MyMath.median(this.dataValues(), this.sliderRangeSelected()); var viewModel = new ViewModel(chartData); }, this); ko.applyBindings(viewModel); }; <div class="slider-range" data-bind="jqueryui: { widget: 'slider', options: { values: this.sliderRangeSelected() }}"></div> <div>Min: <span class="min" data-bind="text: min"></span></div> <div>Max: <span class="max" data-bind="text: max"></span></div>
  • 8.
  • 9. Ключевые концепции Декларативная привязка Автоматическое обновление UI Ассоциация DOM элементов При изменении view модели, с view моделью в разметке UI обновляется автоматически, и наоборот Отслеживание зависимостей Шаблонизация Автоматически отслеживает цепочки Позволяет строить богатый интерфейс с зависимостей во view модели использованием шаблонов, отслеживает вложенные шаблоны
  • 10. Встроенные привязки (bindings): Декларативная привязка •Управления текстом и внешним видом: visible, text, html, css, style, attr •Управления логикой представления: foreach, if, ifnot, with •Работы с полями формы: click, event, submit, enable, disable, value, hasfocus, checked, options, selectedOptions, uniqueName
  • 11. Шаблон MVVM (Model-View-ViewModel) View: интерактивный UI, основанный на view модели. View Model: плоский объект, представляющий данные и операции на UI. Например, для реализации редактора списка, Ваша view модель будет представлена объектом со списком элементов и методов по их добавлению/удалению в список. Model: . Прикладная логика, которая описывает объекты предметной области и операции над ними. Модель не зависит от UI.
  • 12. Особенности • Бесплатный, с открытыми исходниками MIT лицензия • Чистый JavaScript Работает с любым веб-фреймворком • Легковесный 39кб сжатая, 13кб с HTTP сжатием • Нет зависимостей • Поддерживает все мейнстрим браузеры: IE 6+, Firefox 2+, Chrome, Opera, Safari (desktop/mobile) • Полная документация: API, живые примеры, интерактивные учебники
  • 13. Преимущества: -Полная автономность -Автоматическое отслеживание зависимостей, обновление UI -Прозрачная архитектура -Повышенная тестируемость -Очень низкий порог вхождения Недостатки: -Нет поддержки SEO