Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ThinkPHP #2: Управление кодом в JavaScript
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
thinkphp_com_ua
July 06, 2012
Programming
3.5k
1
Share
ThinkPHP #2: Управление кодом в JavaScript
thinkphp_com_ua
July 06, 2012
More Decks by thinkphp_com_ua
See All by thinkphp_com_ua
ThinkPHP #7: Оптимизация верстки для High-Density дисплеев
thinkphp_com_ua
0
2.3k
ThinkPHP #7: Адаптация веб-сайта под различные дисплеи
thinkphp_com_ua
0
2.4k
ThinkPHP #7: Bluz - наш код как музыка
thinkphp_com_ua
0
2.2k
ThinkPHP #6: Usability кода
thinkphp_com_ua
0
1.5k
ThinkPHP #6: Нелёгкий труд интервьюера
thinkphp_com_ua
2
1.5k
ThinkPHP #6: Адаптивный дизайн - время пришло!
thinkphp_com_ua
0
1.5k
ThinkPHP #3: Highload не кусается
thinkphp_com_ua
1
2k
ThinkPHP #3: Оптимизация быстродействия Веб-сайта
thinkphp_com_ua
1
1.9k
ThinkPHP #3: Дизайн пользовательских интерфейсов для разработчиков
thinkphp_com_ua
1
2k
Other Decks in Programming
See All in Programming
2026-04-15 Spring IO - I Can See Clearly Now
jonatan_ivanov
1
120
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
230
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
300
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
260
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
440
(Re)make Regexp in Ruby: Democratizing internals for the JIT
makenowjust
3
840
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
220
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
260
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
190
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
180
Road to RubyKaigi: Play Hard(ware)
makicamel
1
490
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
390
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Leo the Paperboy
mayatellez
7
1.7k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
180
Skip the Path - Find Your Career Trail
mkilby
1
110
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
4 Signs Your Business is Dying
shpigford
187
22k
The Spectacular Lies of Maps
axbom
PRO
1
720
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
Transcript
Учимся управлять кодом в JavaScript
О чем этот доклад? Этот доклад о инструментах, парадигмах программирования
и приемах, которые упрощают разработку на JavaScript и позволяют повторно использовать Ваш код. А именно: • jQuery • RequireJs • OOP • Namespacing
Namespaces - Предотвращение столкновения имен - Отображение пространства имен на
путь на файловой системе
Namespaces Плохо: его могут “перетереть” var widget = new MyWidget()
Хорошо: var widget = new MyNamespace.Widget() Плохо:не понятно где искать сам файл baseUrl = “/js/”; 1. MyWidget = baseUrl+ “/src/allmycode.js” 2. MyWidget = baseUrl + “/src/widgets/my.js” Хорошо: MyNamespace.Widget = baseUrl+ “/MyNamespace/Widget.js”
Manual Namespaces Implementation Архинеудобно! Создать a.b.c.d (верх юзабилити!): var a
= {b:{c:{d:{}}}} // хе-хе... сколько скобочек? Получить a.b.c.d (не факт что существует): If(!a){ // думаю, смысл понятен }
Namespace with getObject plugin http://benalman.com/projects/jquery-getobject-plugin/ Создать a.b.c.d : $.setObject('a.b.c.d',{}) Получить
a.b.c (не факт что существует): $.getObject('a.b.c') Проверка на существование: $.exists('d.e.f')
RequireJs http://requirejs.org/ Отличное дополнение к setObject: • Подгрузка скриптов по
требованию • Подгрузка шаблонов (text.js plugin) • Отслеживание зависимостей • 1 файл = 1 модуль • Система оптимизации/сборки скриптов • Интеграция с jQuery
RequireJs Setup
Module Definition
Main.js
Make Your Own Build With RequireJs Что потребуется: • Nodejs
• r.js (можно скачать на сайте requirejs.org) • Составить профиль билда • Запустить скрипт
Build Profile: app.build.js
Run Build&See Results! node r.js -o app.build.js Выгода: • Удобные
разработка,поддержка и дебаг • Бесболезненные мержи • Удобный и быстрый билд при релизе
OOP in JavaScript Дает нам: • расширяемость • повторное использование
кода Инструменты: • better/base/declare – писал Ваш Покорный Слуга • https://github.com/dfilatov/jquery-plugins/tree/master/src/jquery.inherit
Common jQuery Development Process • Нагуглить плагин • Понять что
он не подходит под Ваши нужды • Нагуглить плагин.... • ...................................
What if we will modify this plugin??? m-m-m.... no=(
Jquery UI Fails: DatePicker Bad Architecture/Code Reuse Проблема: изменение разметки
меняет ВСЕ дейтпикеры • Решение: Клонировать cам jQuery
How Frequently You Use This Piece of Code? Ничего не
забыли? Например, повесить статус загрузки. Обработка ошибок?
Make a widget!
What about Dialog?
And More And More And More... • Accordion – коллекция
Pane'ов с заголовками • Tabs - коллекция из Pane'ов и ассоциированных с ними кнопок • Wizard widget • Slide Show
Profit?! • Максимальное повторное использование кода: Pane является предком/составной частью
для Dialog,Tabs, Accordion etc • API легко запомнить. Все виджеты на базе Pane или использующие Pane будут реализовывать методы класса Pane • Все эти виджеты, как и Pane, уведомляют пользователя о состоянии загрузки изаботятся об обработке ошибок
Questions?
Thanks for your Attention