SlideShare a Scribd company logo
Возьми больше от jQuery


Post JScriptum
Agenda

— Это всего лишь javaScript
— Почему jQuery?
— Приимущества jQuery Widget factory
— Обзор инфраструктуры jQuery Widget
  Factory
Это всего лишь JavaScript

— “Там нечего писать”
— “Элементарщина”
— “Придаток к серверной части”
— “Как два пальца”
Вот блин...

— Слишком много зависимостей
— Не оптимальные решения
— Большое количество кода
— Повторяющийся код
Почему jQuery?
Widget Factory
DOM-element
    +
  Widget
    =
Компонента
it's alive!!!
Translate Inline

или как нам удалось уменьшить количество кода
на 30%, значительно расширив функциональность
и увеличив производительность...
Take more from Jquery
1. Количество кода стало меньше на 30%

До рефакторинга             После рефакторинга




Количество строк - 209       Количество строк - 133
Вес файла – 7.3 Кб           Вес файла – 5.1 Кб
2. Улучшенная архитектура



                  Edit Trigger

                       +
                Translate Inline

                       +
                     Dialog
3. Конфигурация
1.$.widget("mage.translateInline", {
2.     options: {
3.         translateForm: {
4.             template: /* template */,
5.             data: {
6.                  id: 'translate-inline-form',
7.                  message: 'Please refresh the page.'
8.             }
9.         },
10.        dialog: {
11.              modal: true,
12.              dialogClass: "dialog",
13.              width: 650,
14.              title: 'Translate',
15.              height: 470,
16.              zIndex: 2100,
17.        }
18.    },
19.    /* Widget methods */
20.});
Take more from Jquery
4. Кастомизация
1.$(document).translateInline({
2.     display: 'inline',
3.     translateForm: {
4.         template: /* new template */
5.     },
6.     editTrigger: {
7.         template: /* new template */,
8.         alt:'Translate',
9.         offsetTop:0
10.    },
11.    dialog: {
12.         modal:false,
13.         width: 320,
14.         height: 170,
15.         id: 'translate-dialog'
16.    }
17.});
Take more from Jquery
5. Коммуникация между компонентами

         dialog
         Translate Inline

                          edit event
                          edit event



           Text for translate
           Edit Trigger




1._onClick: function(e) {
1.this.element
2.    e.stopImmediatePropagation();
      .on('edit.editTrigger', $.proxy(this._onEdit, this));
3.    $(this.currentTarget).trigger('edit.' + this.widgetName);
4.},
6. Неожиданный бонус.




$(‘#statistic-area').translateInline();
Дополнительные
преимущества
— Наследование и полиморфизм
— Конструктор/Деструктор
— Псевдоселектор
— Private и Public методы
— Механизм колбэков
Нет Велосипедам!
I WANT YOU TO USE
JQUERY WIDGET FACTORY
Ресурсы
•   http://wiki.jqueryui.com/w/page/12138135/Widget%20factory
•   http://ajpiano.com/widgetfactory/
•   http://bililite.com/blog/understanding-jquery-ui-widgets-a-tutorial/
•   http://www.erichynds.com/jquery/tips-for-developing-jquery-ui-widgets/
•   http://net.tutsplus.com/tutorials/javascript-ajax/coding-your-first-jquery-ui-
    plugin/
1. Декларация
$.widget('component.menu', {
    options: {
        type: 'horisontal',
        …
    },
    _create: function(){…},
    …
});


2. Инициализация
$('#menu-id').menu();


3. Кастомизация
$('#menu-id').menu({
    type: 'vertical',
    show: function(el){el.faneIn(100);}
});
4. this.element
$.widget('component.menu', {
    _create: function(){
        this.element.on('click', function(){...});
    },
    …
});


5. private/public методы
$('#menu-id').menu('show', 'slow');
$('#menu-id').menu('_render');


6. Cоздание нескольких инстансов одновременно
7. Автоматический вызов метода “_create”,
“_init”
$('#menu-id').menu(); //Отработает _create и _init
$('#menu-id').menu(); //Отработает только _init
8. Метод “destroy”
9. disable/enable
10. Псевдоселектор
$(‘:component-menu');


11. Наследование/Полиморфизм
$.widget('my.dialog', $.ui.dialog.prototype, {
    open: function(){
        /*Your code here*/
        $.ui.dialog.prototype.show.apply(this, arguments);
    }
});

12. Механизм колбэков _trigger
13. Мгновенное реагирование на изменение опций
$.widget('my.dialog', $.ui.dialog.prototype, {
      _setOption: function(key, value) {
          var oldValue = this.options[key];
          if (key == "className") {
              this.element.toggleClass(oldValue + " " + value);
          }
          // Вызов базового метода _setOption
          $.Widget.prototype._setOption.apply(this, arguments);
    }
});

$('#dialog-id').dialog('option', 'className', 'white');

More Related Content

PDF
Ф'Yii'лософия
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
PDF
"Жизнь без интернета" Кувалдин Артём, Яндекс
PPTX
Yii2
PDF
Александр Кашеверов - Коротко про WEB
PPT
Общая архитектура Yii2
PDF
Продвинутое использование ActiveRecord в Yii2
PDF
10 - Web-технологии. MVC фреймворки (продолжение)
Ф'Yii'лософия
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
"Жизнь без интернета" Кувалдин Артём, Яндекс
Yii2
Александр Кашеверов - Коротко про WEB
Общая архитектура Yii2
Продвинутое использование ActiveRecord в Yii2
10 - Web-технологии. MVC фреймворки (продолжение)

What's hot (19)

PDF
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
PDF
Making Scalable JavaScript Application
PPT
Web осень 2012 лекция 4
PDF
11 - Web-технологии. Работа с СУБД
PPTX
course js day 4
PPTX
I tmozg js_school_jquery
PDF
YiiConf: Миграции и инсталляции
PDF
Примеры решения типичных задач за рамками ядра Yii2
PDF
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
PDF
Почему Mojolicious?
PDF
Пластилиновый код: как перестать кодить и начать жить
PDF
Что нового в Django 1.4
PDF
Crazy owl yii1=> yii2
PPT
Мульти-доменность в Django проекте
PDF
Static Sites Generation
PDF
Миша Рудрастых: Введение в HTTP API WordPress
PDF
13 - Web-технологии. Отображение данных
PDF
Gennady kovshenin-wcrus2015-2
PPTX
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Making Scalable JavaScript Application
Web осень 2012 лекция 4
11 - Web-технологии. Работа с СУБД
course js day 4
I tmozg js_school_jquery
YiiConf: Миграции и инсталляции
Примеры решения типичных задач за рамками ядра Yii2
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
Почему Mojolicious?
Пластилиновый код: как перестать кодить и начать жить
Что нового в Django 1.4
Crazy owl yii1=> yii2
Мульти-доменность в Django проекте
Static Sites Generation
Миша Рудрастых: Введение в HTTP API WordPress
13 - Web-технологии. Отображение данных
Gennady kovshenin-wcrus2015-2
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Ad

Viewers also liked (8)

PPTX
Tdd php
PPTX
DevHub 3 - Pricing
PDF
Magento 2 Page Cache
PPT
Choreography of web-services
PPT
Security in PHP
PDF
DevHub 3 - CVS
PPTX
Magento devhub
PDF
DevHub 3 - Composer plus Magento
Tdd php
DevHub 3 - Pricing
Magento 2 Page Cache
Choreography of web-services
Security in PHP
DevHub 3 - CVS
Magento devhub
DevHub 3 - Composer plus Magento
Ad

More from Magento Dev (9)

PDF
Yurii Hryhoriev "Php storm tips&tricks"
PPTX
Magento2 airplane
PPTX
Imagine recap-devhub
PPTX
Разработка на стероидах или как я перестал бояться и полюбил свою IDE
PPTX
Top 5 magento secure coding best practices Alex Zarichnyi
PPTX
Data migration into eav model
PPT
Php + erlang
PDF
Gearman jobqueue
PDF
Autotest
Yurii Hryhoriev "Php storm tips&tricks"
Magento2 airplane
Imagine recap-devhub
Разработка на стероидах или как я перестал бояться и полюбил свою IDE
Top 5 magento secure coding best practices Alex Zarichnyi
Data migration into eav model
Php + erlang
Gearman jobqueue
Autotest

Take more from Jquery

  • 1. Возьми больше от jQuery Post JScriptum
  • 2. Agenda — Это всего лишь javaScript — Почему jQuery? — Приимущества jQuery Widget factory — Обзор инфраструктуры jQuery Widget Factory
  • 3. Это всего лишь JavaScript — “Там нечего писать” — “Элементарщина” — “Придаток к серверной части” — “Как два пальца”
  • 4. Вот блин... — Слишком много зависимостей — Не оптимальные решения — Большое количество кода — Повторяющийся код
  • 7. DOM-element + Widget = Компонента
  • 9. Translate Inline или как нам удалось уменьшить количество кода на 30%, значительно расширив функциональность и увеличив производительность...
  • 11. 1. Количество кода стало меньше на 30% До рефакторинга После рефакторинга Количество строк - 209 Количество строк - 133 Вес файла – 7.3 Кб Вес файла – 5.1 Кб
  • 12. 2. Улучшенная архитектура Edit Trigger + Translate Inline + Dialog
  • 13. 3. Конфигурация 1.$.widget("mage.translateInline", { 2. options: { 3. translateForm: { 4. template: /* template */, 5. data: { 6. id: 'translate-inline-form', 7. message: 'Please refresh the page.' 8. } 9. }, 10. dialog: { 11. modal: true, 12. dialogClass: "dialog", 13. width: 650, 14. title: 'Translate', 15. height: 470, 16. zIndex: 2100, 17. } 18. }, 19. /* Widget methods */ 20.});
  • 15. 4. Кастомизация 1.$(document).translateInline({ 2. display: 'inline', 3. translateForm: { 4. template: /* new template */ 5. }, 6. editTrigger: { 7. template: /* new template */, 8. alt:'Translate', 9. offsetTop:0 10. }, 11. dialog: { 12. modal:false, 13. width: 320, 14. height: 170, 15. id: 'translate-dialog' 16. } 17.});
  • 17. 5. Коммуникация между компонентами dialog Translate Inline edit event edit event Text for translate Edit Trigger 1._onClick: function(e) { 1.this.element 2. e.stopImmediatePropagation(); .on('edit.editTrigger', $.proxy(this._onEdit, this)); 3. $(this.currentTarget).trigger('edit.' + this.widgetName); 4.},
  • 19. Дополнительные преимущества — Наследование и полиморфизм — Конструктор/Деструктор — Псевдоселектор — Private и Public методы — Механизм колбэков
  • 21. I WANT YOU TO USE JQUERY WIDGET FACTORY
  • 22. Ресурсы • http://wiki.jqueryui.com/w/page/12138135/Widget%20factory • http://ajpiano.com/widgetfactory/ • http://bililite.com/blog/understanding-jquery-ui-widgets-a-tutorial/ • http://www.erichynds.com/jquery/tips-for-developing-jquery-ui-widgets/ • http://net.tutsplus.com/tutorials/javascript-ajax/coding-your-first-jquery-ui- plugin/
  • 23. 1. Декларация $.widget('component.menu', { options: { type: 'horisontal', … }, _create: function(){…}, … }); 2. Инициализация $('#menu-id').menu(); 3. Кастомизация $('#menu-id').menu({ type: 'vertical', show: function(el){el.faneIn(100);} });
  • 24. 4. this.element $.widget('component.menu', { _create: function(){ this.element.on('click', function(){...}); }, … }); 5. private/public методы $('#menu-id').menu('show', 'slow'); $('#menu-id').menu('_render'); 6. Cоздание нескольких инстансов одновременно 7. Автоматический вызов метода “_create”, “_init” $('#menu-id').menu(); //Отработает _create и _init $('#menu-id').menu(); //Отработает только _init
  • 25. 8. Метод “destroy” 9. disable/enable 10. Псевдоселектор $(‘:component-menu'); 11. Наследование/Полиморфизм $.widget('my.dialog', $.ui.dialog.prototype, { open: function(){ /*Your code here*/ $.ui.dialog.prototype.show.apply(this, arguments); } }); 12. Механизм колбэков _trigger
  • 26. 13. Мгновенное реагирование на изменение опций $.widget('my.dialog', $.ui.dialog.prototype, { _setOption: function(key, value) { var oldValue = this.options[key]; if (key == "className") { this.element.toggleClass(oldValue + " " + value); } // Вызов базового метода _setOption $.Widget.prototype._setOption.apply(this, arguments); } }); $('#dialog-id').dialog('option', 'className', 'white');