Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie...

32

Transcript of Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie...

Page 1: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js
Page 2: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Tytuł oryginału: jQuery Design Patterns

Tłumaczenie: Piotr Pilch

ISBN: 978-83-283-2832-7

Copyright © Packt Publishing 2016.

First published in the English language under the title ‘jQuery Design Patterns – 9781785888687’.

Polish edition copyright © 2017 by Helion SAAll rights reserved.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/bjqswp.zip

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/bjqswpMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Spis tre ci

O autorze 9

O recenzencie 11

Przedmowa 13

Rozdzia 1. Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt 19

Biblioteka jQuery i obs uga skryptowa modelu DOM 20Modyfikowanie modelu DOM za pomoc biblioteki jQuery 21

Wzorzec Kompozyt 26Sposób wykorzystania wzorca Kompozyt przez bibliotek jQuery 26Porównanie korzy ci uzyskiwanych w przypadku rezygnacji

ze zwyk ego interfejsu API modelu DOM 29U ycie wzorca Kompozyt do projektowania aplikacji 31

Wzorzec Iterator 34Sposób wykorzystania wzorca Iterator przez bibliotek jQuery 34Powi zanie wzorca Iterator z wzorcem Kompozyt 36Zastosowanie wzorca Iterator 36

Podsumowanie 38

Rozdzia 2. Wzorzec Obserwator 39

Wprowadzenie do wzorca Obserwator 39Sposób wykorzystania wzorca Obserwator przez bibliotek jQuery 41Demonstracja przyk adowego przypadku u ycia 47Porównanie wzorca Obserwator z u yciem atrybutów zdarze 53Zapobieganie „wyciekom” pami ci 56

Wprowadzenie do wzorca Obserwator ze zdarzeniami delegowanymi 57Upraszczanie kodu przez wzorzec Obserwator ze zdarzeniami delegowanymi 58Porównanie korzy ci zwi zanych z wykorzystaniem pami ci 59

Podsumowanie 60

Poleć książkęKup książkę

Page 4: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

4

Rozdzia 3. Wzorzec Publikowanie/Subskrybowanie 61

Wprowadzenie do wzorca Publikowanie/Subskrybowanie 62Ró nice mi dzy wzorcem Publikowanie/Subskrybowanie i wzorcem Obserwator 63

Adaptowanie wzorca Publikowanie/Subskrybowanie przez bibliotek jQuery 64Zdarzenia niestandardowe w bibliotece jQuery 64Implementowanie schematu wzorca Publikowanie/Subskrybowanie

za pomoc zdarze niestandardowych 64Demonstracja przyk adowego przypadku u ycia 65

U ycie wzorca Publikowanie/Subskrybowanie w przyk adzie panelu sterowania 65Rozszerzanie implementacji 68U ycie dowolnego obiektu jako brokera 70

Zastosowanie przestrzeni nazw zdarze niestandardowych 70Podsumowanie 71

Rozdzia 4. Dziel i zwyci aj za pomoc wzorca Modu 73

Modu y i przestrzenie nazw 73Hermetyzowanie integralnych cz ci implementacji 74Unikanie zmiennych globalnych za pomoc przestrzeni nazw 74Korzy ci oferowane przez wzorce modu ów i przestrzeni nazw 75Powszechna akceptacja 75

Wzorzec Litera obiektu 76Wzorzec Modu 78

Blok konstrukcyjny wzorca IIFE 78Prosty wzorzec Modu IIFE 80Wariant wzorca Modu z przestrzeni nazw jako parametrem 82Wariant wzorca Modu zawartego we wzorcu IIFE 85

Wzorzec Modu udost pniaj cy 86U ycie funkcji Strict Mode j zyka ECMAScript 5 88Wprowadzenie do modu ów j zyka ECMAScript 6 88U ycie modu ów w aplikacjach jQuery 90

G ówny modu dashboard 91Modu categories 92Modu informationBox 93Modu counter 94Przegl d implementacji 95

Podsumowanie 96

Rozdzia 5. Wzorzec Fasada 97

Wprowadzenie do wzorca Fasada 97Zalety wzorca Fasada 98Sposób adaptacji wzorca Fasada przez bibliotek jQuery 99

Interfejs API biblioteki jQuery operacji przechodzenia w obr bie modelu DOM 100Interfejs API operacji modyfikowania i uzyskiwania dost pu do w a ciwo ci 103

Zastosowanie wzorca Fasada w aplikacjach 104Podsumowanie 107

Poleć książkęKup książkę

Page 5: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Spis tre ci

5

Rozdzia 6. Wzorce Budowniczy i Fabryka 109

Wprowadzenie do wzorca Fabryka 109Wykorzystanie wzorca Fabryka przez bibliotek jQuery 110U ycie wzorca Fabryka w aplikacjach 112

Wprowadzenie do wzorca Budowniczy 116Wykorzystanie wzorca Budowniczy przez interfejs API biblioteki jQuery 117Zastosowanie wzorca Budowniczy wewn trznie przez bibliotek jQuery 120Wykorzystanie wzorca Budowniczy w aplikacjach 122

Podsumowanie 126

Rozdzia 7. Wzorce asynchronicznego przep ywu sterowania 127

Programowanie z wykorzystaniem wywo a zwrotnych 128U ycie prostych wywo a zwrotnych w j zyku JavaScript 129Konfigurowanie wywo a zwrotnych jako w a ciwo ci obiektu 129Zastosowanie wywo a zwrotnych w aplikacjach opartych na bibliotece jQuery 130Tworzenie metod akceptuj cych wywo ania zwrotne 132Organizowanie wywo a zwrotnych 133

Wprowadzenie do poj cia obiektów Promise 136U ycie obiektów Promise 138Zagadnienia zaawansowane 143

Tworzenie a cucha obiektów Promise 143Obs uga zg aszanych b dów 145

czenie obiektów Promise 146Sposób u ycia obiektów Promise przez bibliotek jQuery 147Transformacja obiektów Promise w obiekty innych typów 148Podsumowanie zalet obiektów Promise 149

Podsumowanie 150

Rozdzia 8. Wzorzec Atrapa obiektu 151

Wprowadzenie do wzorca Atrapa obiektu 151U ycie atrap obiektów w aplikacjach opartych na bibliotece jQuery 153

Definiowanie faktycznych wymaga us ugi 154Implementowanie atrapy us ugi 155U ycie atrapy us ugi 157

Podsumowanie 158

Rozdzia 9. Tworzenie szablonów klienckich 159

Wprowadzenie do biblioteki Underscore.js 160U ycie szablonów biblioteki Underscore.js w aplikacjach 161

Wprowadzenie do biblioteki Handlebars.js 164U ycie biblioteki Handlebars.js w aplikacjach 166

Asynchroniczne pobieranie szablonów HTML 169Adaptowanie dynamicznego adowania szablonów w istniej cej implementacji 170Moderacja to najlepsza rzecz 172

Podsumowanie 172

Poleć książkęKup książkę

Page 6: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

6

Rozdzia 10. Wzorce do projektowania dodatków i wid etów 173

Wprowadzenie do dodatków biblioteki jQuery 174Stosowanie zasad obowi zuj cych w bibliotece jQuery 174U ycie metody $.noCon ict() 177Opakowywanie z wykorzystaniem wzorca IIFE 177

Tworzenie dodatków do wielokrotnego wykorzystania 179Akceptowanie parametrów konfiguracyjnych 179Tworzenie stanowych dodatków biblioteki jQuery 182Implementowanie stanowego dodatku biblioteki jQuery 183Usuwanie instancji dodatku 185Implementowanie metod pobieraj cych i ustawiaj cych 186U ycie dodatku w aplikacji panelu sterowania 187

U ycie projektu dodatków jQuery Boilerplate 188Dodawanie metod do dodatku 190

Wybieranie nazwy 191Podsumowanie 192

Rozdzia 11. Wzorce optymalizacji 193

Umieszczanie skryptów w pobli u ko ca kodu strony 194Tworzenie pakunków i minifikowanie zasobów 194

U ycie parametrów wzorca IIFE 195Zastosowanie sieci CDN 196

Zastosowanie interfejsu API sieci CDN JSDelivr 197Optymalizowanie wspólnego kodu w JavaScripcie 197

Tworzenie lepszych p tli for 197Tworzenie wydajnych selektorów CSS 198Tworzenie efektywnego kodu jQuery 199

Minimalizowanie operacji przechodzenia w obr bie modelu DOM 199Nie przesadzaj 201Usprawnianie operacji modyfikacji modelu DOM 201U ycie obserwatorów ze zdarzeniami delegowanymi 205U ycie metody $.noop() 205U ycie dodatku $.single 206

„Leniwe” adowanie modu ów 208Podsumowanie 210

Skorowidz 213

Poleć książkęKup książkę

Page 7: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

1

Utrwalenie wiedzyo bibliotece jQueryi wzorcu Kompozyt

Przed pojawieniem si standardu Web 2.0 serwisy internetowe by y jedynie no nikiem opar-tym na dokumentach, który oferowa tylko wzajemne po czenie ró nych stron/dokumentóworaz obs ug skryptow po stronie klienta ograniczon przewa nie do sprawdzania poprawno-ci formularza. W 2005 roku pojawi y si serwisy Gmail i Google Maps, a JavaScript sta si

j zykiem u ywanym przez du e przedsi biorstwa do tworzenia aplikacji o du ej skali i zapewnia-nia rozbudowanych interakcji opartych na interfejsie u ytkownika.

Nawet pomimo tego, e od czasu pojawienia si j zyka JavaScript dokonano w nim bardzoniewielu zmian, znacz co zmieni y si oczekiwania wiata przedsi biorców wzgl dem mo liwo cistron internetowych. Odt d projektanci witryn internetowych musieli zapewnia z o one interak-cje z u ytkownikiem. Wreszcie na rynku zacz funkcjonowa termin „aplikacja internetowa”.W efekcie oczywiste zaczyna o stawa si to, e projektanci powinni tworzy pewne abstrak-cje kodu, definiowa sprawdzone procedury i adaptowa wszystkie mo liwe do zastosowaniawzorce projektowe (ang. design patterns), jakie informatyka mog a zaoferowa . Powszechnewykorzystanie j zyka JavaScript w przypadku aplikacji dla przedsi biorstw u atwi o jego rozwój,który zosta rozszerzony za pomoc specyfikacji EcmaScript2015/EcmaScript6 (ES6) w sposóbpozwalaj cy na atwe u ycie jeszcze wi kszej liczby wzorców projektowych.

W sierpniu 2006 roku po raz pierwszy zosta a udost pniona przez Johna Resiga bibliotekajQuery w witrynie o adresie http://jquery.com/. Biblioteka zosta a stworzona w celu zapew-nienia wygodnego w u yciu interfejsu API s u cego do lokalizacji elementów modelu DOM.Od tego czasu biblioteka stanowi integraln cz pakietu narz dziowego projektanta aplikacji

Poleć książkęKup książkę

Page 8: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

20

internetowych. U swoich podstaw biblioteka jQuery korzysta z kilku wzorców projektowychi próbuje zach ci projektanta do u ywania ich za po rednictwem zapewnianych przez siebiemetod. Wzorzec Kompozyt (ang. Composite Pattern) to jeden z tych wzorców ujawniany projek-tantowi za pomoc bardzo podstawowej metody jQuery(), która s u y do wykonywania opera-cji przemieszczania si w obr bie modelu DOM i stanowi jeden z najbardziej wyró niaj cychsi elementów biblioteki jQuery.

W tym rozdziale zosta y omówione nast puj ce zagadnienia: Utrwalenie wiedzy na temat obs ugi skryptowej modelu DOM za pomoc

biblioteki jQuery. Wprowadzenie do wzorca Kompozyt. Sposób wykorzystania wzorca Kompozyt przez bibliotek jQuery. Korzy ci wynikaj ce z u ycia biblioteki jQuery zamiast zwyk ych operacji

modyfikacji modelu DOM za pomoc kodu w JavaScripcie. Wprowadzenie do wzorca Iterator. Zastosowanie wzorca Iterator w przyk adowej aplikacji.

Biblioteka jQuery i obs uga skryptowamodelu DOMDzi ki obs udze skryptowej modelu DOM odwo ujemy si do dowolnej procedury zmieniaj cejlub przetwarzaj cej elementy strony internetowej po za adowaniu jej przez przegl dark . DOMAPI to interfejs API j zyka JavaScript poddany standaryzacji w 1998 roku. Zapewnia on projek-tantom aplikacji internetowych kolekcj metod, które pozwalaj na modyfikowanie elementówdrzewa modelu DOM tworzonych przez przegl dark po za adowaniu i poddaniu analiziesk adniowej kodu HTML strony internetowej.

Wi cej informacji o modelu DOM (Document Object Model) i jego interfejsach API znajdziesz na stronie inter-netowej o adresie https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction.

Wykorzystuj c interfejs API modelu DOM w swoim kodzie napisanym w JavaScripcie, projektan-ci aplikacji internetowych mog modyfikowa w z y tego modelu i dodawa nowe elementylub usuwa elementy istniej ce w obr bie strony. Pocz tkowo podstawowym przypadkiemu ycia obs ugi skryptowej modelu DOM by o jedynie sprawdzanie poprawno ci formularzypo stronie klienta. Jednak e z up ywem lat i w miar jak JavaScript zyskiwa uznanie w wiecieprzedsi biorstw zacz to implementowa bardziej z o one interakcje z u ytkownikiem.

Pocz tkowa wersja biblioteki jQuery pojawi a si w sierpniu 2006 roku. Jej zadaniem by o u a-twienie projektantom aplikacji internetowych modyfikowania drzewa modelu DOM i wykonywania

Poleć książkęKup książkę

Page 9: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

21

operacji przechodzenia w jego obr bie. Jednym z g ównych celów biblioteki by o zapewnienieabstrakcji, które umo liwia y tworzenie krótszego, bardziej czytelnego i mniej podatnego nab dy kodu, a jednocze nie zagwarantowanie zgodno ci z ró nymi przegl darkami.

Powy sze podstawowe zasady obowi zuj ce w przypadku biblioteki jQuery s wyra nie widocznena jej stronie internetowej, na której zaprezentowano je w nast puj cy sposób:

(…)szybka, niewielka i bogata w mo liwo ci biblioteka j zyka JavaScript. Sprawiaona, e takie dzia ania, jak modyfikowanie dokumentów HTML i przechodzeniew ich obr bie, obs uga zdarze , u ywanie animacji i technologii Ajax, s znacznieprostsze z wykorzystaniem prostego w u yciu interfejsu API, który wspó pracujez wieloma przegl darkami. cz c wszechstronno i rozszerzalno , bibliotekajQuery zmieni a sposób, w jaki miliony osób pisze kod w JavaScripcie.

Zapewniane od pocz tku przez bibliotek jQuery interfejsy API z abstrakcjami, a tak e sposób or-ganizacji ró nych wzorców projektowych, przyczyni y si do wysokiego poziomu akceptacjibiblioteki przez projektantów aplikacji internetowych. W rezultacie, zgodnie z kilkoma ród amiinformacji, takimi jak serwis BuiltWith.com (http://trends.builtwith.com/javascript/jQuery),biblioteka jQuery jest wykorzystywana przez ponad 60% najcz ciej odwiedzanych witryninternetowych z ca ego wiata.

Modyfikowanie modelu DOM za pomoc biblioteki jQueryAby utrwali informacje na temat biblioteki jQuery, omówimy przyk adow stron internetow ,w której przypadku s wykonywane proste operacje modyfikowania modelu DOM. W przyk adziezostanie za adowana prosta strona ze struktur , która pocz tkowo wygl da podobnie jak naponi szym rysunku.

Do zmiany tre ci i uk adu strony zostanie u yty kod jQuery. Aby efekty uruchomienia koduby y wyra nie widoczne, zostanie on tak skonfigurowany, eby dzia a przez oko o 700 milisekundod momentu za adowania strony. Wynik operacji modyfikowania zaprezentowano na rysunkuna nast pnej stronie.

Poleć książkęKup książkę

Page 10: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

22

Przejrzyjmy kod HTML u yty w poprzednim przyk adzie:

<!DOCTYPE html><html> <head> <title>Modyfikacje modelu DOM</title> <link rel="stylesheet" type="text/css" href="dom-manipulations.css"> </head> <body> <h1 id="pageHeader">Modyfikacje modelu DOM</h1> <div class="boxContainer"> <div> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! </p> </div> <div> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! </p> </div> <div> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! </p> </div> </div> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! </p> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! </p> <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.0.min.js"></script>

Poleć książkęKup książkę

Page 11: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

23

<script type="text/javascript" src="jquery-dom-manipulations.js"></script> </body></html>

U yty kod CSS jest do prosty. Zawiera on tylko trzy nast puj ce klasy arkuszy stylów CSS:

.box { padding: 7px 10px; border: solid 1px #333; margin: 5px 3px; box-shadow: 0 1px 2px #777;}.boxsizer { float: left; width: 33.33%;}.clear { clear: both; }

Powy szy kod generuje stron podobn do pokazanej na pierwszym rysunku (po wy wietleniu jejw przegl darce i przed wykonaniem kodu napisanego w JavaScripcie). W kodzie CSS zdefi-niowano najpierw kilka stylów podstawowych dla klas CSS box, boxsizer i clear. Aby ele-menty przypomina y pole, klasa box okre la style powi zanych elementów znajduj cych si nastronie przy u yciu dope niania, cienkiej ramki, marginesu oraz niewielkiego cienia poni ej ele-mentów. Klasa boxsizer sprawi, e korzystaj ce z niej elementy b d mie tylko jedn trzeciszeroko ci ich elementu nadrz dnego, a ponadto utworz uk ad z o ony z trzech kolumn. I wresz-cie klasa clear b dzie stosowana w elemencie w roli punktu przerwania dla uk adu kolumno-wego. W efekcie wszystkie elementy nast puj ce po tym elemencie zostan umiejscowioneponi ej niego. Klasy boxsizer i clear nie s pocz tkowo wykorzystywane przez aden elementzdefiniowany w kodzie HTML, ale b d u ywane po zmodyfikowaniu modelu DOM za pomockodu w JavaScripcie.

W elemencie <body> kodu HTML na pocz tku definiowany jest element nag ówka <h1> z identy-fikatorem pageHeader, aby z atwo ci element ten móg by wybierany w obr bie kodu JavaScript.Tu poni ej elementu <h1> definiujemy pi elementów akapitu (<p>) z klas box. Spo ródtych elementów pierwsze trzy opakowano za pomoc trzech elementów <div>, a nast pnieprzy u yciu kolejnego elementu <div> z klas boxContainer.

Po osi gni ciu dwóch znaczników <script> do czane jest najpierw odwo anie do bibliotekijQuery zapewnianej w ramach jej sieci CDN. Wi cej informacji mo esz znale pod adresemhttp://code.jquery.com/. W drugim znaczniku <script> ma miejsce odwo anie do pliku JavaScriptuz kodem wymaganym w omawianym przyk adzie. Ma on nast puj c posta :

setTimeout(function() { $('#pageHeader').css('font-size', '3em'); var $boxes = $('.boxContainer .box'); $boxes.append( '<br /><br /><i>W sytuacji, gdy niezb dne s proste rozwi zania</i>.');

Poleć książkęKup książkę

Page 12: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

24

$boxes.parent().addClass('boxsizer'); $('.boxContainer').append('<div class="clear">');}, 700);

W celu opó nienia jego wykonania, zgodnie z wcze niej opisanym przypadkiem u ycia, ca y kodopakowano za pomoc wywo ania funkcji setTimeout. Pierwszy parametr tego wywo ania tofunkcja anonimowa, która zostanie wykonana po up ywie 700 milisekund (okre lonych w drugimparametrze) mierzonych przez licznik.

W pierwszym wierszu funkcji anonimowej wywo ania zwrotnego u yto funkcji $() bibliotekijQuery, aby dokona przej cia w obr bie modelu DOM i zlokalizowa element o identyfikatorzepageHeader, a nast pnie zastosowa metod css() do zwi kszenia rozmiaru czcionki dla tegoelementu przez ustawienie warto ci 3em dla w a ciwo ci font-size. W dalszej kolejno ci funkcji$() zapewniany jest bardziej z o ony selektor CSS, co ma na celu zlokalizowanie wszystkichelementów z klas box, które s elementami potomnymi elementu z klas boxContainer. Wynikoperacji jest zapisywany w zmiennej o nazwie $boxes.

Konwencje nazewnicze dotycz ce zmiennych

W ród projektantów powszechn praktyk jest stosowanie konwencji nazewniczych w wypadku zmiennych,które przechowuj obiekty okre lonego typu. Korzystanie z takich konwencji nie tylko u atwia zapami -tywanie tego, co przechowuje zmienna, ale te sprawia, e napisany kod jest atwiejszy do zrozumieniaprzez innych programistów wchodz cych w sk ad zespo u. Projektanci biblioteki jQuery cz sto u ywajnazw zmiennych zaczynaj cych si od znaku $, gdy zmienna przechowuje wynik funkcji $() (znana równiejako obiekt kolekcji biblioteki jQuery).

Po zaj ciu si interesuj cymi nas elementami z klas box na ko cu ka dego z nich do czamydwie spacje ami ce i dodatkowy tekst w postaci kursywy. Dalej u ywana jest zmienna $boxesi za pomoc metody parent() wykonywana jest operacja przej cia o jeden poziom w gór drzewamodelu DOM. Metoda zwraca inny obiekt biblioteki jQuery przechowuj cy elementy nadrz dne<div> pocz tkowo wybranych pól. W ramach a cucha do czane jest nast pnie wywo anie metodyaddClass(), która przypisuje tym polom klas CSS boxsizer.

Je li konieczne jest przej cie wszystkich w z ów nadrz dnych wybranego elementu, mo esz skorzysta z me-tody $.fn.parents(). Aby jedynie znale pierwszy element nadrz dny zgodny z danym selektorem CSS,rozwa u ycie metody $.fn.closest().

Poniewa do uzyskania trójkolumnowego uk adu klasa boxsizer u ywa elementów unosz cych si ,musz one zosta wyczyszczone w klasie boxContainer. I tym razem przechodzenie mi dzy ele-mentami modelu DOM umo liwia prosty selektor CSS .boxContainer i funkcja $(). Dalej wywo-ywana jest metoda .append() w celu utworzenia nowego elementu <div> z klas CSS .clear.

Element wstawiany jest na ko cu kodu elementu boxContainer.

Poleć książkęKup książkę

Page 13: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

25

Po up ywie 700 milisekund wykonywanie kodu jQuery zostanie uko czone. Uzyskamy zapre-zentowany wcze niej trójkolumnowy uk ad. W swoim ko cowym stanie kod HTML elementuboxContainer b dzie mie nast puj c posta :

<div class="boxContainer"> <div class="boxsizer"> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! <br><br><i>W sytuacji, gdy niezb dne s proste rozwi zania</i>. </p> </div> <div class="boxsizer"> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! <br><br><i>W sytuacji, gdy niezb dne s proste rozwi zania</i>. </p> </div> <div class="boxsizer"> <p class="box"> J zyk JavaScript pozwala w atwy sposób modyfikowa model DOM! <br><br><i>W sytuacji, gdy niezb dne s proste rozwi zania</i>. </p> </div> <div class="clear"></div></div>

Tworzenie a cucha metod i interfejsy „p ynne”W poprzednim przyk adzie w a ciwie wykonano te jeden dodatkowy krok i po czono w jednwszystkie trzy instrukcje kodu powi zane z polami. Instrukcja ma nast puj c posta :

$('.boxContainer .box') .append('<br /><br /><i>W sytuacji, gdy niezb dne s prosterozwi zania</i>.') .parent() .addClass('boxsizer');

Ten wzorzec sk adni nosi nazw wzorca tworzenia a cucha metod i jest szczególnie zalecanyprzez twórców biblioteki jQuery oraz spo eczno j zyka JavaScript. Tworzenie a cucha metodjest cz ci wzorca implementacji obiektowej interfejsów „p ynnych”, w którego przypadkuka da metoda przekazuje swój kontekst wykonywania kolejnej metodzie.

Wi kszo metod biblioteki jQuery, które dotycz obiektu jQuery, zwraca te ten sam lub nowyobiekt kolekcji elementów jQuery. Pozwala to utworzy a cuch z o ony z kilku metod. Dzi kitemu uzyskuje si kod nie tylko bardziej czytelny i wyrazisty, ale te z mniejsz liczb nie-zb dnych deklaracji zmiennych.

Poleć książkęKup książkę

Page 14: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

26

Wzorzec KompozytW przypadku wzorca Kompozyt kluczowym zagadnieniem jest mo liwo traktowania kolekcjiobiektów w taki sam sposób, w jaki traktujemy instancj pojedynczego obiektu. Zmodyfiko-wanie kompozycji za pomoc metody kolekcji spowoduje uwzgl dnienie modyfikacji dla ka dejcz ci kompozycji. Metody te mog by pomy lnie stosowane, niezale nie od liczby elementównale cych do kolekcji kompozytu, nawet wtedy, gdy kolekcja nie zawiera elementów.

Ponadto obiekty kolekcji kompozytu niekoniecznie musz zapewnia dok adnie te same metody.Obiekt kompozytu mo e ujawnia tylko metody wspólne w przypadku obiektów kolekcji lub udo-st pnia interfejs API z abstrakcj i odpowiednio obs ugiwa odró nianie metod ka dego obiektu.

Wyja nijmy dalej, w jaki sposób intuicyjny interfejs API zapewniany przez bibliotek jQueryw du ym stopniu zale ny jest od wzorca Kompozyt.

Sposób wykorzystania wzorca Kompozytprzez bibliotek jQueryWzorzec Kompozyt stanowi integraln cz architektury biblioteki jQuery i stosowany jest z po-ziomu samej, bardzo podstawowej funkcji $(). Ka de wywo anie tej funkcji powoduje utwo-rzenie i zwrócenie obiektu kolekcji elementów, który cz sto jest po prostu nazywany obiektemjQuery. W a nie w tym przypadku widoczna jest pierwsza zasada wzorca Kompozyt. Okazuje si ,e zamiast pojedynczego elementu funkcja $() zwraca kolekcj elementów.

Zwracany obiekt jQuery to obiekt podobny do tablicy, który pe ni rol obiektu opakowuj cegoi przechowuje kolekcj pobranych elementów. Obiekt ten zapewnia te kilka nast puj cych do-datkowych w a ciwo ci:

w a ciwo length okre laj ca d ugo uzyskanej kolekcji elementów; w a ciwo context okre laj ca kontekst, w jakim obiekt zosta utworzony; w a ciwo CSS selector okre laj ca selektor u yty w wywo aniu funkcji $(); w a ciwo prevObject u ywana w sytuacji, gdy konieczne jest uzyskanie dost pu

do poprzedniej kolekcji elementów po dodaniu wywo ania metody do a cucha metod.

Korzystaj c z narz dzi programistycznych naszej ulubionej przegl darki, z atwo ci mo emypoeksperymentowa z obiektami jQuery zwracanymi przez funkcj $() i sprawdzi opisanewcze niej w a ciwo ci. Aby uruchomi te narz dzia w wi kszo ci przegl darek, niezb dnejest jedynie naci ni cie klawisza F12 w systemach Windows i Linux lub u ycie kombinacjiklawiszy Cmd+Opt+I w systemie Mac. Bezpo rednio po wykonaniu tej czynno ci mo na za-stosowa wywo ania funkcji $() w konsoli i klikn zwrócone obiekty w celu sprawdzenia ichw a ciwo ci.

Poleć książkęKup książkę

Page 15: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

27

Prosta definicja obiektu przypominaj cego tablic

Obiekt podobny do tablicy to obiekt { } j zyka JavaScript z w a ciwo ci numeryczn length i odpo-wiedni liczb w a ciwo ci o nazwach w postaci kolejnych liczb. Inaczej mówi c, obiekt przypominaj cytablic z w a ciwo ci length o warto ci 2 (length == 2) powinien te mie zdefiniowane dwie w a-ciwo ci "0" i "1". W wypadku tych w a ciwo ci obiekty podobne do tablicy umo liwiaj uzyskanie do-

st pu do ich zawarto ci za pomoc prostych p tli for z wykorzystaniem sk adni akcesorów w a ciwo ciz nawiasami klamrowymi j zyka JavaScript: for (var i = 0; i < obj.length; i++) { console.log(obj[i]); }

Na poni szym rysunku widoczny jest wynik wywo ania $('#pageHeader') u ytego we wcze-niejszym przyk adzie w przypadku narz dzi programistycznych przegl darki Firefox.

Wynik wywo ania $('.boxContainer .box') zosta przedstawiony na kolejnym rysunku.

To, e w bibliotece jQuery obiekty przypominaj ce tablic pe ni rol obiektów opakowuj cychzwracane elementy, pozwala tej bibliotece zapewni dodatkowe metody, które s stosowanewzgl dem zwróconej kolekcji. Jest to osi gane dzi ki dziedziczeniu prototypowemu obiektujQuery.fn. W efekcie ka dy obiekt jQuery ma te dost p do wszystkich metod zapewnianychprzez bibliotek jQuery. W ten sposób tworzony jest ca y wzorzec Kompozyt udost pniaj cymetody, które po zastosowaniu dla kolekcji s odpowiednio uwzgl dniane dla ka dego jej ele-mentu sk adowego. Poniewa biblioteka jQuery korzysta z obiektów przypominaj cych tablicz dziedziczeniem prototypowym, metody te z atwo ci mog zosta u yte jako w a ciwo ciw ka dym obiekcie jQuery. Zosta o to zaprezentowane w przyk adzie na pocz tku rozdzia u:

Poleć książkęKup książkę

Page 16: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

28

$('#pageHeader').css('font-size', '3em');. Co wi cej, biblioteka jQuery dodaje do swojegokodu modyfikuj cego model DOM kilka dodatkowych elementów, co ma na celu uzyskanie bardziejzwi z ego kodu, który jest mniej podatny na b dy. Gdy na przyk ad metoda jQuery.fn.html()u ywana jest do zmiany wewn trznego kodu HTML w z a modelu DOM, który zawiera juelementy podrz dne, biblioteka jQuery próbuje najpierw usun wszelkie dane i proceduryobs ugi zdarze powi zane z tymi elementami, zanim usunie je ze strony i do czy zapewnionykod HTML.

Przyjrzyjmy si temu, jak biblioteka jQuery implementuje takie metody stosowane wzgl dem ko-lekcji. W tym celu mo emy pobra i wy wietli kod ród owy ze strony witryny GitHub powi zanejz bibliotek jQuery (https://github.com/jquery/jquery/releases) lub skorzysta z narz dzia takiegojak jQuery Source Viewer, które jest dost pne pod adresem http://james.padolsey.com/jquery.

Zale nie od u ywanej wersji uzyskane wyniki mog si w pewnym stopniu ró ni . Najnowsza stabilnawersja biblioteki jQuery, która by a dost pna i wykorzystywana, gdy pisano t ksi k , to wersja 2.2.0.

Metoda jQuery.fn.empty() to jedna z najprostszych metod demonstruj cych, jak implementowa-ne s metody stosowane wzgl dem kolekcji. Implementacj tej metody z atwo ci mo eszzlokalizowa w kodzie ród owym biblioteki jQuery, wyszukuj c a cuch empty: lub u ywaj cnarz dzia jQuery Source Viewer i szukaj c a cucha jQuery.fn.empty. Skorzystanie z dowolnegoz tych sposobów pozwoli uzyska nast puj cy kod:

empty: function() { var elem, i = 0; for ( ; ( elem = this[ i ] ) != null; i++ ) { if ( elem.nodeType === 1 ) { // Zapobiegni cie „wyciekowi” pami ci jQuery.cleanData( getAll( elem, false ) ); // Usuni cie wszystkich pozosta ych w z ów elem.textContent = ""; } } return this;}

Jak wida , kod wcale nie jest z o ony. Biblioteka jQuery dokonuje iteracji wszystkich elementówobiektu kolekcji (przywo ywany w postaci s owa kluczowego this, poniewa ma to miejsce we-wn trz implementacji metody) przy u yciu zwyk ej p tli for. Dla ka dego elementu kolekcji,czyli w z a elementu, kod jQuery czy ci warto ci wszystkich w a ciwo ci data-* za pomocfunkcji pomocniczej jQuery.cleanData(). Bezpo rednio po tej operacji kod usuwa zawartoelementów, ustawiaj c dla nich a cuch pusty.

Wi cej informacji o ró nych okre lanych typach w z ów mo esz znale pod adresem https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType.

Poleć książkęKup książkę

Page 17: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

29

Porównanie korzy ci uzyskiwanych w przypadkurezygnacji ze zwyk ego interfejsu API modelu DOMAby wyra nie zademonstrowa korzy ci zapewniane przez wzorzec Kompozyt, zmodyfikuje-my przyk ad z pocz tku rozdzia u bez u ywania abstrakcji oferowanych przez bibliotek jQuery.U ywaj c tylko zwyk ego kodu napisanego w JavaScripcie i interfejsu API modelu DOM,mo emy utworzy równorz dny kod o nast puj cej postaci:

setTimeout(function() { var headerElement = document.getElementById('pageHeader'); if (headerElement) { headerElement.style.fontSize = '3em'; } var boxContainerElement = document.getElementsByClassName('boxContainer')[0]; if (boxContainerElement) { var innerBoxElements = boxContainerElement.getElementsByClassName('box'); for (var i = 0; i < innerBoxElements.length; i++) { var boxElement = innerBoxElements[i]; boxElement.innerHTML += '<br /><br /><i>W sytuacji, gdy niezb dne s proste rozwi zania</i>.'; boxElement.parentNode.className += ' boxsizer'; } var clearFloatDiv = document.createElement('div'); clearFloatDiv.className = 'clear'; boxContainerElement.appendChild(clearFloatDiv); }}, 700);

I tym razem u ywana jest funkcja setTimeout z funkcj anonimow . Jako drugi parametr ustawio-no czas 700 milisekund. Wewn trz samej funkcji zastosowano metod document.getElementByIddo pobrania elementów, w których przypadku wiadomo, e maj na stronie unikatowy identyfikator.W dalszej kolejno ci u ywana jest metoda document.getElementsByClassName, gdy niezb dnejest uzyskanie wszystkich elementów zawieraj cych konkretn klas . Zastosowano te metodboxContainerElement.getElementsByClassName('box') do pobrania wszystkich elementów z klasbox, które s elementami podrz dnymi elementu z klas boxContainer.

W tym wypadku najbardziej oczywist obserwacj jest to, e w celu osi gni cia identycznychwyników niezb dnych by o 18 wierszy kodu. Dla porównania: w przypadku korzystania z biblio-teki jQuery wymaganych by o tylko 9 wierszy kodu, czyli po owa tego, co zosta o u yte w powy -szej implementacji. Zastosowanie funkcji $() biblioteki jQuery z selektorem CSS by o prostszymsposobem uzyskania wymaganych elementów. Sposób ten zapewnia ponadto zgodno z przegl -darkami, które nie obs uguj metody getElementsByClassName(). Istnieje jednak wi cej korzy cini tylko mniejsza liczba wierszy kodu i zwi kszona czytelno . Implementuj c wzorzec Kompo-zyt, funkcja $() zawsze pobiera kolekcje elementów, dzi ki czemu kod staje si bardziej jednolity

Poleć książkęKup książkę

Page 18: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

30

w porównaniu z ró ni c si obs ug ka dej z zastosowanych metod getElement*. Funkcja $()u ywana jest dok adnie w taki sam sposób, niezale nie od tego, czy po dane jest uzyskaniejedynie elementu z unikatowym identyfikatorem, czy liczby elementów z konkretn klas .

W ramach dodatkowej korzy ci wynikaj cej ze zwracania obiektów przypominaj cych tablicbiblioteka jQuery mo e te zapewnia wygodniejsze metody przechodzenia w obr bie modelu DOMi modyfikowania go. S to na przyk ad metody .css(), .append() i .parent() zaprezentowanew pierwszym przyk adzie, dost pne jako w a ciwo ci zwracanego obiektu. Ponadto bibliotekajQuery oferuje metody dokonuj ce abstrakcji bardziej z o onych przypadków u ycia, takie jak.addClass() i .wrap(). W wypadku tych metod nie istniej odpowiadaj ce im metody, które scz ci interfejsu API modelu DOM.

Poniewa zwracane obiekty kolekcji biblioteki jQuery nie ró ni si niczym innym ni opakowy-wane przez nie elementy, w identyczny sposób mo emy u y dowolnej metody interfejsu APIbiblioteki jQuery. Jak wcze niej pokazano, metody te, niezale nie od liczby elementów, stosowanes dla ka dego elementu pobranej kolekcji. W efekcie nie ma potrzeby u ywania osobnej p tlifor w celu przeprowadzenia iteracji dla ka dego pobranego elementu, a tak e wykonywaniaosobno operacji modyfikowania (np. przy u yciu metody .addClass()), które s stosowanebezpo rednio wzgl dem obiektu kolekcji.

Aby w zamieszczonym dalej przyk adzie nadal zapewni takie same gwarancje dotycz ce bez-piecznego wykonania, konieczne jest równie dodanie kilku dodatkowych instrukcji if spraw-dzaj cych warto ci null. Jest to wymagane, poniewa je li na przyk ad nie znaleziono zmiennejheaderElement, wyst pi b d, a reszta wierszy kodu nigdy nie zostanie wykonana. Kto móg byuzna , e tego rodzaju sprawdzenia, takie jak if (headerElement) i if (boxContainerElement),nie s wymagane w tym przyk adzie i mog zosta pomini te. W tym przypadku mo e si to wy-dawa poprawne, ale w rzeczywisto ci jest to jeden z g ównych powodów pojawiania si b -dów podczas projektowania aplikacji o du ej skali, w których nieustannie elementy s tworzone,wstawiane i usuwane z drzewa modelu DOM. Niestety, w wypadku wszystkich j zyków i platformdocelowych programi ci tworz zwykle najpierw logik implementacji, a dopiero pó niej do-daj takie sprawdzenia. Cz sto ma to miejsce po pojawieniu si b du podczas testowaniaimplementacji.

Zgodnie z wzorcem Kompozyt nawet pusty obiekt kolekcji biblioteki jQuery (nie zawieraj cyadnych pobranych elementów) w dalszym ci gu jest poprawnym obiektem kolekcji, w którym

mo na bezpiecznie zastosowa dowoln metod zapewnian przez bibliotek jQuery. W rezulta-cie nie ma potrzeby u ywania dodatkowych instrukcji if do sprawdzenia przed zastosowaniemmetody takiej jak .css() (tylko po to, aby unikn b du rodowiska wykonawczego koduJavaScript), czy kolekcja faktycznie zawiera jakikolwiek element.

Ogólnie rzecz bior c, abstrakcje oferowane przez bibliotek jQuery z wykorzystaniem wzorcaKompozyt zapewniaj mniejsz liczb wierszy kodu, który jest bardziej czytelny i jednolity,a ponadto zawiera mniej wierszy podatnych na literówki (porównaj wpisywanie instrukcji$('#elementID') z instrukcj document.getElementById('elementID')).

Poleć książkęKup książkę

Page 19: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

31

U ycie wzorca Kompozyt do projektowania aplikacjiGdy ju wyja niono, jak biblioteka jQuery korzysta z wzorca Kompozyt w swojej architekturze,a tak e porównano korzy ci zapewniane przez wzorzec, spróbujmy samodzielnie utworzy przy-k adowy przypadek u ycia. Postaramy si uwzgl dni wszystkie zagadnienia zaprezentowanewcze niej w tym rozdziale. Kompozyt b dzie mie struktur obiektu przypominaj cego tablic .Ponadto wzorzec b dzie przetwarza obiekty o ca kowicie innej strukturze, zapewnia „p ynny”interfejs API umo liwiaj cy tworzenie a cucha metod oraz udost pnia metody, które stosowanes dla wszystkich elementów kolekcji.

Przyk adowy przypadek u yciaZa ó my, e istnieje aplikacja, która w pewnym momencie wymaga wykonania operacji na licz-bach. Z kolei elementy wymagane przez aplikacj do przetwarzania pochodz z ró nych ródei zupe nie nie s jednolite. Aby przyk ad by interesuj cy, przyjmijmy, e jedno ród o danychzapewnia zwyk e liczby, a inne obiekty z okre lon w a ciwo ci , która zawiera interesuj c nasliczb .

var numberValues = [2, 5, 8];var objectsWithValues = [ { value: 7 }, { value: 4 }, { value: 6 }, { value: 9 }];

Obiekty zwracane przez drugie ród o wyst puj ce w przyk adowym przypadku u ycia mogmie bardziej z o on struktur i prawdopodobnie kilka dodatkowych w a ciwo ci. Takie zmianyw aden sposób nie spowoduj zró nicowania przyk adowej implementacji, gdy podczastworzenia wzorca Kompozyt interesuje nas jedynie zapewnienie jednolitej obs ugi wspólnychcz ci elementów docelowych.

Implementacja kolekcji kompozytuZdefiniujmy funkcj konstruktora i prototyp opisuj ce przyk adowy obiekt kolekcji kompozytu:

function ValuesComposite() { this.length = 0;}ValuesComposite.prototype.append = function(item) { if ((typeof item === 'object' && 'value' in item) || typeof item === 'number') { this[this.length] = item; this.length++; } return this;};

Poleć książkęKup książkę

Page 20: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

32

ValuesComposite.prototype.increment = function(number) { for (var i = 0; i < this.length; i++) { var item = this[i]; if (typeof item === 'object' && 'value' in item) { item.value += number; } else if (typeof item === 'number') { this[i] += number; } } return this;};ValuesComposite.prototype.getValues = function() { var result = []; for (var i = 0; i < this.length; i++) { var item = this[i]; if (typeof item === 'object' && 'value' in item) { result.push(item.value); } else if (typeof item === 'number') { result.push(item); } } return result;};

Funkcja konstruktora ValuesComposite() w przyk adzie jest do prosta. W razie wywo ania zapomoc operatora new zwraca ona pusty obiekt z w a ciwo ci length równ zeru, która wskazuje,e kolekcja opakowywana przez funkcj jest pusta.

Wi cej informacji o opartym na prototypie modelu programowania j zyka JavaScript dost pnych jest na stronieinternetowej pod adresem https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object--Oriented_JavaScript.

Konieczne jest najpierw zdefiniowanie sposobu umo liwiaj cego wype nienie obiektów kolekcjikompozytu. Zdefiniowano metod append, która sprawdza, czy zapewniony parametr jest jednegoz obs ugiwanych przez ni typów. Metoda do cza parametr w obiekcie kompozytu w wypadkunast pnej dost pnej w a ciwo ci numerycznej i inkrementuje warto w a ciwo ci length. Naprzyk ad pierwszy do czony element, niezale nie od tego, czy jest obiektem z w a ciwo ciw postaci warto ci czy zwyk ej liczby, zostanie udost pniony w a ciwo ci "0" obiektu kompozytui b dzie dost pny jako myValuesComposition[0]w ramach sk adni akcesorów w a ciwo ci z nawia-sami klamrowymi.

Metoda increment jest prezentowana jako prosta, przyk adowa metoda, która mo e modyfikowatakie kolekcje przez przetwarzanie wszystkich ich elementów. Jako parametr metoda akcep-tuje warto liczbow , a nast pnie odpowiednio j obs uguje, dodaj c j do ka dego elementukolekcji (zale nie od ich typu). Poniewa przyk adowy kompozyt to obiekt podobny do tablicy,

Poleć książkęKup książkę

Page 21: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

33

metoda increment korzysta z p tli for, aby dokona iteracji wszystkich elementów kolekcji,i zwi ksza albo warto item.value (w sytuacji, gdy element jest obiektem), albo faktycznprzechowywan warto liczbow (gdy zapisany element kolekcji to liczba). W ten sam sposóbmo emy kontynuowa dzia ania i implementowa inne metody, które na przyk ad umo liwipomno enie elementów kolekcji przez konkretn liczb .

Aby umo liwi utworzenie a cucha metod przyk adowego obiektu kompozytu, wszystkiemetody prototypu musz zwraca odwo anie do instancji obiektu. Cel ten osi gamy po prostuprzez dodanie instrukcji return this; jako ostatniego wiersza kodu w wypadku wszystkichmetod modyfikuj cych kolekcj , takich jak append i increment. Miej wiadomo tego, e takiemetody jak getValues, które nie modyfikuj kolekcji, lecz s u do zwrócenia wyniku, z za o-enia nie mog by dodawane do a cucha metod, aby przekaza instancj obiektu kolekcji

kolejnym wywo aniom metody.

I wreszcie metoda getValues implementowana jest jako wygodny sposób uzyskiwania rzeczywi-stych warto ci liczbowych wszystkich elementów kolekcji. Podobnie do metody increment metodagetValues dokonuje abstrakcji obs ugi dotycz cej ró nych typów elementów kolekcji. Metodaprzeprowadza iteracj elementów kolekcji, wyodr bnia ka d warto liczbow i do cza j dotablicy result, która jest zwracana elementowi wywo uj cemu metod .

Przyk ad wykonania koduPora zaznajomi si z faktycznym przyk adem korzystaj cym z w a nie zaimplementowanegoobiektu kompozytu:

var valuesComposition = new ValuesComposite();for (var i = 0; i < numberValues.length; i++) { valuesComposition.append(numberValues[i]);}for (var i = 0; i < objectsWithValues.length; i++) { valuesComposition.append(objectsWithValues[i]);}valuesComposition.increment(2) .append(1) .append(2) .append({ value: 3 });console.log(valuesComposition.getValues());

Wykonanie w przegl darce powy szego kodu po umieszczeniu go w obr bie istniej cej stronylub bezpo rednio w konsoli przegl darki zarejestruje ona nast puj cy wynik:

Array [ 4, 7, 10, 9, 6, 8, 11, 1, 2, 3 ].

Korzystamy ze róde danych, takich jak zmienne numberValues i objectsWithValues, którezaprezentowano wcze niej. W powy szym kodzie iterowane s obie zmienne, a ich elementys do czane do nowo utworzonej instancji obiektu kompozytu. Dalej inkrementowane s o 2warto ci kolekcji kompozytu. Bezpo rednio po tej operacji tworzony jest a cuch trzech metod

Poleć książkęKup książkę

Page 22: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

34

append wstawiaj cych element. Pierwsze dwie metody do czaj warto ci liczbowe, a trzecia do-daje obiekt z w a ciwo ci w postaci warto ci. Aby uzyska tablic z wszystkimi warto ciamiliczbowymi kolekcji i zarejestrowa j w konsoli przegl darki, na ko cu u ywana jest metodagetValues.

Implementacje alternatywneMiej wiadomo tego, e kompozyt nie musi by obiektem przypominaj cym tablic , ale jestto ogólnie preferowane, poniewa JavaScript u atwia utworzenie takiej implementacji. Ponadtoimplementacje podobne do tablicy zapewniaj te korzy w postaci umo liwiania iteracji ele-mentów kolekcji przy u yciu prostej p tli for.

Z kolei gdy obiekt przypominaj cy tablic nie jest preferowany, z atwo ci mo na skorzystaz w a ciwo ci w obiekcie kompozytu, aby przechowywa elementy kolekcji. Taka w a ci-wo mo e na przyk ad mie nazw items i s u y do przechowywania (za pomoc instrukcjithis.items.push(item)) oraz udost pniania (przy u yciu instrukcji this.items[i]) elementówkolekcji w obr bie metod.

Wzorzec IteratorKluczowym poj ciem zwi zanym z wzorcem Iterator jest zastosowanie funkcji jednej odpowiedzial-no ci w celu przechodzenia w obr bie kolekcji i zapewniania dost pu do jej elementów. Funkcjata jest znana jako iterator i umo liwia uzyskanie dost pu do elementów kolekcji bez ujawnia-nia szczegó ów implementacji oraz bazowej struktury danych u ywanej przez obiekt kolekcji.

Iteratory zapewniaj poziom hermetyzacji dotycz cy sposobu przeprowadzania iteracji elementówkolekcji, oddzielaj c ten proces od implementacji logiki konsumentów tych elementów.

Wi cej informacji o zasadzie jednej odpowiedzialno ci znajdziesz pod adresem http://www.oodesign.com/single-responsibility-principle.html.

Sposób wykorzystania wzorca Iteratorprzez bibliotek jQueryJak wspomniano wcze niej w tym rozdziale, podstawowa funkcja $() biblioteki jQuery zwracaobiekt przypominaj cy tablic , który opakowuje kolekcj elementów strony, a tak e zapewniafunkcj iteratora umo liwiaj c przechodzenie w obr bie kolekcji i uzyskiwanie dost pu do po-szczególnych elementów. W przypadku biblioteki jQuery wykonano w a ciwie jeden dodatkowykrok, udost pniaj c ogóln funkcj pomocnicz jQuery.each(), która mo e dokonywa iteracjitablic, obiektów podobnych do tablicy oraz w a ciwo ci obiektu.

Poleć książkęKup książkę

Page 23: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

35

Bardziej techniczny opis dost pny jest na stronie dokumentacji interfejsu API biblioteki jQuerypod adresem http://api.jquery.com/jQuery.each/, gdzie zamieszczono nast puj c informacjdotycz c metody jQuery.each():

Ogólna funkcja iteratora, która mo e pos u y do ci g ej iteracji zarówno obiektów,jak i tablic. Tablice i obiekty przypominaj ce tablic z w a ciwo ci d ugo ci (np. obiektargumentu funkcji) s iterowane przy u yciu indeksu liczbowego, od zera do warto cid ugo -1. Inne obiekty s iterowane z wykorzystaniem ich w a ciwo ci z nazwami.

Funkcja pomocnicza jQuery.each() u ywana jest wewn trznie w kilku miejscach kodu ró-d owego biblioteki jQuery. Jednym z zastosowa tej funkcji jest iteracja elementów obiektujQuery i, zgodnie z tym, co sugeruje wzorzec Kompozyt, wykonywanie operacji modyfikowaniadla ka dego z nich. Proste wyszukiwanie s owa kluczowego .each( zapewnia 56 dopasowa .

Gdy pisano ksi k , najnowsz stabiln wersj biblioteki by a wersja 2.2.0, której u yto do uzyskaniapowy szych statystyk.

Z atwo ci mo na prze ledzi implementacj funkcji w kodzie ród owym biblioteki jQuery,wyszukuj c a cuch each: (zauwa , e s dwa wyst pienia) lub u ywaj c narz dzia jQuery SourceViewer i szukaj c a cucha jQuery.each() (jak to mia o miejsce wcze niej w tym rozdziale):

each: function( obj, callback ) { var length, i = 0; if ( isArrayLike( obj ) ) { length = obj.length; for ( ; i < length; i++ ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } else { for ( i in obj ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } return obj;}

Ta funkcja pomocnicza jest te dost pna w dowolnym obiekcie jQuery dzi ki u yciu tego samegodziedziczenia prototypowego, które zaprezentowano wcze niej w przypadku metod takich jak.append(). Z atwo ci mo esz znale kod, który realizuje dok adnie co takiego. W tym celuza pomoc narz dzia jQuery Source Viewer wyszukaj a cuch jQuery.fn.each() lub w kodzie ró-d owym biblioteki jQuery bezpo rednio poszukaj a cucha each: (zauwa , e s dwa wyst pienia):

Poleć książkęKup książkę

Page 24: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

36

each: function( callback ) { return jQuery.each( this, callback );}

Zastosowanie wariantu z wyszukiwaniem a cucha .each() pozwala na bezpo redni iteracjelementów obiektu kolekcji biblioteki jQuery z wykorzystaniem wygodniejszej w u yciu sk adni.

Widoczny poni ej przyk adowy kod prezentuje, jak w kodzie mog zosta u yte dwa wariantyfunkcji .each():

// U ycie funkcji pomocniczej dla tablicy$.each([3, 5, 7], function(index){ console.log(this + 1);});// U ycie metody dla obiektu jQuery$('.boxContainer .box').each(function(index) { console.log('To jest pole o numerze ' + (index + 1)); // Indeks rozpoczyna si // od zera});

Po wykonaniu powy szy kod spowoduje zarejestrowanie w konsoli przegl darki wyniku wi-docznego na poni szym rysunku.

Powi zanie wzorca Iterator z wzorcem KompozytPoniewa wzorzec Kompozyt hermetyzuje kolekcj elementów w postaci jednego obiektu, a wzo-rzec Iterator mo e zosta u yty do iteracji struktury danych z abstrakcj , z atwo ci mo emyte dwa wzorce opisa jako uzupe niaj ce si .

Zastosowanie wzorca IteratorWzorzec Iterator mo e by stosowany w tworzonych aplikacjach w celu definiowania abstrakcjisposobu uzyskiwania dost pu do elementów struktury danych. Dla przyk adu za ó my, e ko-nieczne jest uzyskanie z nast puj cej struktury drzewa wszystkich elementów o warto ciwi kszej ni 4:

Poleć książkęKup książkę

Page 25: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Rozdzia 1. • Utrwalenie wiedzy o bibliotece jQuery i wzorcu Kompozyt

37

var collection = { nodeValue: 7, left: { nodeValue: 4, left: 2, right: { nodeValue: 6, left: 5, right: 9 } }, right: { nodeValue: 9, left: 8 }};

Zaimplementujmy teraz funkcj iteratora. Poniewa drzewiaste struktury danych mog zawierazagnie d anie, uzyskujemy nast puj c implementacj rekurencyjn :

function iterateTreeValues(node, callback) { if (node === null || node === undefined) { return; } if (typeof node === 'object') { if ('left' in node) { iterateTreeValues(node.left, callback); } if ('nodeValue' in node) { callback(node.nodeValue); } if ('right' in node) { iterateTreeValues(node.right, callback); } } else { // Poniewa jest to li , w ze jest warto ci callback(node); }}

Ostatecznie otrzymujemy nast puj c implementacj :

var valuesArray = [];iterateTreeValues(collection, function(value) { if (value > 4) { valuesArray.push(value); }});console.log(valuesArray);

Poleć książkęKup książkę

Page 26: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

38

Po wykonaniu powy szego kodu w konsoli przegl darki zostanie zarejestrowany nast puj cywynik:

Array [ 5, 6, 9, 7, 8, 9 ].

Wyra nie wida , e iterator upro ci kod. Nie ma potrzeby zajmowania si ju szczegó amiimplementacji struktury danych u ywanej ka dorazowo, gdy konieczne jest uzyskanie dost -pu do wybranych elementów spe niaj cych okre lone kryteria. Implementacja bazuje naogólnym interfejsie API udost pnianym przez iterator. Z kolei logika implementacji pojawiasi w wywo aniu zwrotnym zapewnianym iteratorowi.

Taka hermetyzacja umo liwia od czenie implementacji od u ywanej struktury danych, przyza o eniu, e b dzie dost pny iterator z takim samym interfejsem API. W omawianym przy-k adzie z atwo ci mo na zmieni stosowan struktur danych na sortowane drzewo binarnelub prost tablic , a ponadto zachowa bez zmian logik implementacji.

PodsumowanieW tym rozdziale utrwalili my wiedz dotycz c biblioteki jQuery i skryptowego interfejsuAPI modelu DOM j zyka JavaScript. Zaprezentowa em wzorzec Kompozyt i pokaza em, jakjest on wykorzystywany przez bibliotek jQuery. Wyja ni em, w jaki sposób wzorzec Kompozytupraszcza przep yw pracy po przebudowaniu przyk adowej strony bez u ycia kodu jQuery.Dalej przedstawi em przyk ad zastosowania wzorca Kompozyt w aplikacjach. I wreszcie do-kona em wprowadzenia do wzorca Iterator, a tak e pokaza em, jak dobrze mo e wspó dzia az wzorcem Kompozyt.

Po uko czeniu niniejszego wprowadzenia na temat tego, jak wa n rol odgrywa wzorzec Kompo-zyt w sposobie codziennego u ytkowania metod biblioteki jQuery, mo emy przej do nast pnegorozdzia u. Zaprezentujemy w nim wzorzec Obserwator oraz wygodny sposób wykorzystania gow obr bie stron bazuj cych na kodzie jQuery.

Poleć książkęKup książkę

Page 27: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Skorowidz

Aanimacje, 202API modelu DOM, 29asynchroniczne

pobieranie szablonówHTML, 169

wywo ania zwrotne, 128asynchroniczny przep yw

sterowania, 127Atrapa obiektu, 151

przyk ad panelusterowania, 153

atrybuty zdarze , 53

Bbaza danych IndexedDB, 135biblioteka

Closure Compiler, 195Handlebars.js, 164jQuery, 19node-uui, 106UglifyJS, 195Underscore.js, 160, 161YUI Compressor, 195

biblioteki zewn trzne, 193broker, 62, 70Budowniczy, 116

przypadek u ycia, 122zastosowanie wzorca, 120

buforowanie obiektów, 200

CCDN, Content Delivery

Network, 196CSS

tworzenie wydajnychselektorów, 198

czas adowania strony, 169

Ddefiniowanie

przestrzeni nazw, 74wymaga us ugi, 154wywo ania zwrotnego, 41

dodatek$.single, 206Element Mutation

Observer, 183Mockjax, 157

dodatkiakceptowanie parametrów

konfiguracyjnych, 179do wielokrotnego

wykorzystania, 179dodawanie metod, 190projekt jQuery Boilerplate,

188stanowe, 182wybieranie nazwy, 191

dodawanie metod do dodatku,190

DOMminimalizowanie operacji

przechodzenia, 199usprawnianie operacji

modyfikacji, 201DOM, Document Object

Model, 20domkni cie, 40dost p do w a ciwo ci, 103dynamiczne adowania

szablonów, 170dziel i zwyci aj, 73

Eefektywny kod jQuery, 199

Ffabryka, 109

obiektów Promise, 138zastosowanie wzorca, 112

Fasada, 97zastosowanie wzorca, 104

formularz, 112funkcja Strict Mode, 88

Gglobalna przestrze nazw, 74

HHandlebars.js, 164

Poleć książkęKup książkę

Page 28: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

214

Iidentyfikator

$, 160_, 160

IIFE, Immediately InvokedFunction Expression, 78

opakowywanie, 177u ycie parametrów wzorca,

195wariant wzorca Modu , 85

implementacjaatrapy us ugi, 155dodatku, 175kolekcji kompozytu, 31metod pobieraj cych, 186metod ustawiaj cych, 186specyfikacji Promises/A+,

141stanowego dodatku, 183wzorca Publikowanie/

Subskrybowanie, 64interfejs API, 29

MutationObserver, 183oparty na obiektach

Promise, 138operacji modyfikowania,

103operacji przechodzenia

w modelu DOM, 100sieci CDN JSDelivr, 197uzyskiwania dost pu

do w a ciwo ci, 103interfejsy p ynne, 25iteracja list w z ów, 198iterator

powi zanie z wzorcemKompozyt, 36

wykorzystanie wzorca, 34zastosowanie, 36

JJavaScript

biblioteka Underscore.js,160

optymalizowanie wspólnegokodu, 197

wywo ania zwrotne, 129

j zykECMAScript, 88JavaScript, 129

jQuery, 19dodatki, 174obs uga modelu DOM, 21tworzenie efektywnego

kodu, 199u ycie modu ów, 90wykorzystanie obiektów

Promise, 147wykorzystanie wzorca

Budowniczy, 117Fabryka, 110Fasada, 99Iterator, 34Modu , 82Publikowanie/

Subskrybowanie, 64zdarzenia niestandardowe,

64

Kkolejkowanie, 133kompilowanie szablonów, 168kompozyt

implementacja kolekcji, 31implementacje

alternatywne, 34projektowanie aplikacji, 31wykorzystanie wzorca, 26

konfigurowanie wywo azwrotnych, 129

Lleniwe adowanie, 193, 208licznik jQuery.guid, 44litera obiektu, 76, 86

adowaniedynamiczne, 170bibliotek zewn trznych, 193leniwe, 208

a cuchmetod, 25, 176, 201obiektów, 143

czenie obiektów Promise, 146

Mmechanizm selektorów Sizzle,

198metoda

$.ajax(), 147, 181$.extend(), 100, 181$.fn, 174$.fn.end(), 201$.fn.extend(), 100$.fn.on(), 59$.fn.ready(), 45$.getScript(), 209$.noCon ict(), 177$.noop(), 205EventTarget.addEvent

Listener(), 53getModule(), 209Handlebars.compile(), 165jQuery.ajaxSettings.xhr, 111jQuery.ajaxSetup(), 181jQuery.fn.on(), 42then(), 143

metodyakceptuj ce wywo ania

zwrotne, 132pobieraj ce, 186ustawiaj ce, 186

minifikowanie zasobów, 194minimalizowanie operacji

przechodzenia, 199model

DOM, 20TDD, 152

moderacja, 172modu , 78

categories, 92counter, 94dashboard, 91funkcja

Strict Mode, 88hermetyzacja kodu, 73informationBox, 93udost pniaj cy, 86wzorzec IIFE, 79, 80

Poleć książkęKup książkę

Page 29: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Skorowidz

215

z przestrzeni nazwjako parametrem, 82

zalety wzorca, 75modu y j zyka ECMAScript 6,

88modyfikowanie

modelu DOM, 21od czonych elementów,

204

Nnarz dzie

grunt, 195gulp, 195

nazwa dodatku, 191nazwy zmiennych, 24notacja

<% %>, 160<%- %>, 160<%= %>, 160

Oobiekt

broker, 62jqXHR, 147prototypowy, 174singletonowy, 209

obiektykolekcji kompozytu, 175Promise, 127, 136

czenie obiektów, 146obs uga b dów, 145transformacja obiektów,

148tworzenie kilku

kompozycji, 143tworzenie a cucha

obiektów, 143u ycie, 138zalety, 149

obiekty przypominaj ce tablice,27

obserwator, 39atrybuty zdarze , 53gotowo ci dokumentu, 45przypadek u ycia, 47upraszczanie kodu, 58

wyciek pami ci, 56wykorzystanie pami ci, 59wykorzystanie wzorca, 41zdarzenia delegowane, 57

obserwatory ze zdarzeniamidelegowanymi, 93, 205

obs ugab dów, 145modelu DOM, 20

oddzielanie szablonów HTML,162, 167

odroczone wywo ania zwrotne,128

odwo ania do filmów, 154opakowywanie, 177operacje przechodzenia

w obr bie modelu DOM, 100operator OR, 83optymalizowanie kodu, 193, 197organizowanie wywo a

zwrotnych, 133

Ppanel sterowania, 65

modu categories, 92modu counter, 94modu dashboard, 91modu informationBox, 93z atrap , 153zalety wzorca, 98zastosowanie dodatku, 187

parametry wzorca IIFE, 195partnerski obiekt buduj cy, 121p tla for, 197pobieranie asynchroniczne

szablonów, 169pocz tkowe renderowanie

strony, 194projekt jQuery Boilerplate, 188projektowanie

dodatków, 173wid etów, 173

prototypy, 205przestrze nazw, 74

zdarze niestandardowych,70

przetwarzanie obiektówkolekcji, 175

Publikowanie/Subskrybowanie,62

implementowanie schematuwzorca, 64

przyk ad panelu sterowania,65

przypadek u ycia, 65skalowalno , 68wzorzec Obserwator, 63

Rrozdzia zagadnie , 74, 162rozszerzanie implementacji

wzorcaPublikowanie/Subskrybowanie, 68

Sselektory

CSS, 101, 198Sizzle, 198

sieCDN, 196CDN JSDelivr, 197

specyfikacjaA+, 141Promises/A+, 139, 148

style, 202szablon Mustache, 164szablony

biblioteki Underscore.js,161

kodu HTML, 159

TTDD, Test Driven

Development, 152tematy, 62transformacja obiektów

Promise, 148tworzenie

dodatków stanowych, 182elementów modelu DOM,

202fragmentu dokumentu, 120

Poleć książkęKup książkę

Page 30: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js

Biblioteka jQuery. Sprawdzone wzorce projektowe

216

tworzeniea cucha metod, 25, 176,

201a cucha obiektów Promise,

143pakunków, 194szablonów klienckich, 159

Uumieszczanie skryptów

w kodzie, 194Underscore.js, 160unikanie zmiennych globalnych,

74upraszczanie kodu, 58uruchamianie wspó bie ne, 135usprawnianie operacji

modyfikacji, 201usuwanie instancji dodatku, 185u ycie

atrapy us ugi, 157atrybutów zdarze , 53biblioteki Handlebars.js,

166dodatku $.single, 206funkcji Strict Mode, 88metody $.noCon ict(), 177metody $.noop(), 205obserwatorów ze

zdarzeniamidelegowanymi, 205

parametrów wzorca IIFE,195

projektu dodatków jQueryBoilerplate, 188

szablonów bibliotekiUnderscore.js, 161

tematów, 62wzorca Publikowanie/

Subskrybowanie, 65

Wwielokrotne wykorzystanie

dodatków, 179w a ciwo ci obiektu, 129w a ciwo

context, 26CSS selector, 26length, 26prevObject, 26

wyciek pami ci, 56wywo ania zwrotne, 41, 128

asynchroniczne, 128konfigurowanie, 129odroczone, 128organizowanie, 133zastosowanie, 130

wzorceasynchronicznego

przep ywu sterowania,127

do projektowaniadodatków, 173wid etów, 173optymalizacji, 193projektowe, design patterns,

19wzorzec

Atrapa obiektu, 151Budowniczy, 109Fabryka, 109Fasada, 97IIFE, 46, 78Iterator, 34Kompozyt, 19, 26Litera obiektu, 76Modu , 73, 78Obserwator, 39Obserwator ze zdarzeniami

delegowanymi, 193Publikowanie/

Subskrybowanie, 61Py ek, 205tworzenia a cucha metod,

25

Zzasi g operacji przechodzenia,

200zastosowanie

wywo a zwrotnych, 130wzorca Iterator, 36

zdarzeniadelegowane, 57, 205niestandardowe, 70niestandardowe jQuery, 64

zmienne globalne, 74

Poleć książkęKup książkę

Page 32: Tytuł oryginału: jQuery Design Patterns · Wprowadzenie do biblioteki Underscore.js 160 U ycie szablonów biblioteki Underscore.js w aplikacjach 161 Wprowadzenie do biblioteki Handlebars.js