+ All Categories
Home > Documents > Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery...

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery...

Date post: 27-Jul-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
62
Webové aplikace JS OOP, časovače, regex, closure, JS knihovny Promise, jQuery, Require JS, NodeJS... Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019
Transcript
Page 1: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Webové aplikace

JS OOP, časovače, regex, closure,

JS knihovny – Promise, jQuery, Require JS, NodeJS...

Připravil: Ing. Jiří Lýsek, Ph.D.

Verze: 2. 4. 2019

Page 2: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

strana 2

Kolem JS je obrovský

ekosystém…

Page 3: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Knihy o JS

• M. Haverbeke: Eloquent JavaScript

– https://eloquentjavascript.net/

• N. C. Zakas: The Principles of Object

Oriented Javascript

strana 3

Page 4: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Objekty

• Konstruktor je pojmenovaná funkce

var Trida = function(p1, …) {…};

Trida.prototype.metoda =

function(p1, …) {…};

var instance = new Trida(p1, …);

instance.metoda(p1, …);

strana 4

Page 5: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Objekty - dědičnost

var Obdelnik = function(w, h) {

this.w = w;

this.h = h;

};

var Ctverec = function(s) {

Obdelnik.call(this, s, s);

};

Ctverec.prototype = new Obdelnik();

Ctverec.prototype.constructor = Ctverec;

strana 5

https://jsfiddle.net/7gmksyxp/

Čtverec je

potomek

obdélníka

(dědí)

Page 6: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Objekty - dědičnost

• nový JS (ES2015) má i klíčové slovo class a umí i extends

– https://babeljs.io/docs/learn-es2015/

– http://www.ecma-international.org/ecma-

262/6.0/

strana 6

Page 7: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Objekty - prototyp

• je sdílený

– lze jej modifikovat i pro existující instance

• neměnit prototyp vestavěných objektů

– např. Array, Object

– polyfill

strana 7

Není to

dobrý

nápad...

Page 8: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Objekty - valueOf, toString

• metody, které je možné implementovat

– valueOf

• použije se při porovnání s operátory <,>,…

– toString

• použije se při nutnosti přetypování na řetězec

strana 8

Page 9: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Objekty - vlastnosti

• Nová vlastnost se automaticky založí při

prvním použití

• Kontrola pomocí in

• Smazání pomocí delete

object.prop = "Neco";

console.log("prop" in object);

delete object.prop;

strana 9

Pozor

na "..."

Page 10: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

JS a vlákna

• JS je jednovláknový

• WebWorkers API

– komunikace přes

události

strana 10

Page 11: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

JS časovače

var callback = function() {…};

//opakovaně

var i = setInterval(callback, time);

//jednou

var t = setTimeout(callback, time);

//zrušení časovače

clearInterval(i);

clearTimeout(t);

https://jsfiddle.net/cf70nvc0/

strana 11

čas se

zadává

v ms

Page 12: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Regulární výrazy

• Nástroj pro popis pravidel parsování

– /vzor/modifikátory

– /[a-z0-9]+/i

• Použití

– složitější kontrola vstupu

– rozšířené porovnání řetězců

• http://www.w3schools.com/jsref/jsref_

obj_regexp.asp

strana 12

Page 13: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Regulární výrazy

• () dílčí výraz

• [] třída

• ?,*,+ 0/1zn., 0+ zn., 1+ zn.

• . libovolný znak

• \s,\w bílý znak, znak

• ^,$ začátek, konec řetězce

• \. escapování

strana 13

Page 14: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Implementace

• v JS nativněvar pattern = /^[a-z0-9._%+-]+@[a-z0-9.-

]+\.[a-z]{2,6}$/i;

pattern.test(str);

• v PHP funkcípreg_match("/^[a-z0-9._%+-]+@[a-z0-9.-

]+\.[a-z]{2,6}$/i ", $str);

strana 14

reálně je pravidlo pro

email daleko složitější

Page 15: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Uzávěr – closure

• kombinace funkce a "volných"

proměnných

• funkce v JS může použít proměnné z

prostředí, kde je deklarována (i když

nejsou globální)

– Funkce má potom přístup k hodnotám z

těchto proměnných i když je volaná v jiný

čas (události)

strana 15

Page 16: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Uzávěr – closure

function vytvorFunkci() {

var jmeno = "World!";

return function() {

alert("Hello " + jmeno);

};

}

var pozdrav = vytvorFunkci();

pozdrav();

https://jsfiddle.net/wm3pfkrf/

strana 16

Page 17: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Uzávěr – closure – prakticky

• Např. pro vytváření obsluhy událostí v

cyklu

• Nefunguje:

– https://jsfiddle.net/gw3hyp08/

• Funguje:

– https://jsfiddle.net/r3t732a1/

strana 17

V době volání obsluhy

události je už

proměnná i nastavena

na jmena.length

V ES 2015 se

dá použít let

Page 18: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Použití knihoven

• Reálně se API prohlížeče využívá

prostřednictvím knihoven

– fasáda nad API různých prohlížečů (vlastní

API)

– knihovna nás chrání před změnou chování

nativního API prohlížeče a rozdílnou

implementací mezi jeho verzemi

• knihovny: jQuery, YII, Dojo, Prototype,

strana 18

Page 19: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Facade VS Polyfill

• Polyfill je zástupná implementace API

prohlížeče (stejné API)

– pokud prohlížeč něco nepodporuje, nastaví

polyfill svou vlastní funkci

– jakmile to prohlížeč podporovat začne, polyfill se vypne (může se změnit chování)

if(!("localStorage" in window)) {

window.localStorage = function() {…};

}

strana 19

Page 20: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Příklad: registrace události pro W3C

kompatibilní a IE6 nebo 7

function addEvent(eventName, handler,

object) {

if(object.addEventListener) {

object.addEventListener(

eventName, handler, false);

} else {

object.attachEvent(

"on" + eventName, handler);

}

};

strana 20

Page 21: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Příklad: registrace události v

jQuery

$("div.trida").click(function(){

$(this).hide();

});

strana 21

CSS selektor, obecně najde

více HTML značek

obsluha

události

this je odkaz na objekt

odpovědný za vyvolání

události

…a je to stejné už od

začátku a ve všech

verzích knihovy

Page 22: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Frameworky a knihovny - přehled

• knihovny

– jQuery, MooTools, Dojo, YUI, Prototype,

Underscore, Sizzle, React, RequireJS …

• frameworky

– AngularJS, Ember, Knockout, Vue …

• GUI prvky

– Bootstrap, Foundation, jQuery UI,

Skeleton, Material design…

strana 22

Page 23: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Frontend knihovny

• Nezávislost na prohlížeči

– Někdy jsou převzaty do prohlížeče

• Použití

– DOM knihovny

• CSS selektory pro hledání prvků

• Práce s DOM a CSS

• Registrace a obsluha událostí

– AJAX komunikace

– Specifické (práce s JSON, Promise, ...)

strana 23

Obecně přináší

lepší/pohodlnější

přístup

Page 24: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Frontend knihovny

• Není dobré kombinovat všechno se

vším

– méně je více

– některé věci kombinovat nejdou (např.

Bootstrap a jQuery UI)

– Propojené ekosystémy (Bootstrap +

jQuery)

strana 24

Page 25: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Promise – ES 2015

• Implementace rozhraní pro obsluhu

asynchronních volání

– Původně knihovna

– Zlepšuje čitelnost kódu

• Jednotný interface,

– https://jsfiddle.net/8po2gLcf/

– https://developer.mozilla.org/cs/docs/We

b/JavaScript/Reference/Global_Objects/P

romise

strana 25

Page 26: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Promise – ES 2015

var p = new Promise(function(resolve, reject) {

if(confirm('Opravdu?')) {

resolve();

} else {

reject();

}

});

p.then(function() {

console.log('Uzivatel potvrdil akci');

}, function() {

console.log('Uzivatel zamitl akci');

});

• https://jsfiddle.net/8mhv1n3r/

strana 26

Většinou v jiném

modulu/souboru

Page 27: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Promise – ES 2015

• Metody:

– Instance:

• .then(resolve, reject) - standardní obsluha

• .catch(callback) - když je vyvolána výjimka

• .finally(callback) – cleanup

– Statické:

• .all() – více promise naráz

strana 27

Page 28: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Modernizr a HTML5shiv

• detekce nových HTML a CSS

vlastností, případná náhrada za vlastní

JS funkce a CSS styly

– polyfill

• http://modernizr.com/

• https://github.com/aFarkas/html5shiv

strana 28

pro starší prohlížeče

Page 29: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Sizzle

• jednoduchá knihovna realizující CSS

selektory pro hledání v DOM

• Vhodná pro jednodušší aplikace nebo

vlastní knihovny

– dnes je nahrazeno querySelector a

querySelectorAll

var elems = Sizzle(selector, context);

var elems = Sizzle("div .trida", elem);

strana 29

je součástí jQuery

Page 30: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

jQuery

• nejpoužívanější

• většina volání se provádí přes tovární

(factory) funkci nazvanou "$", která

vrací jQuery objekt

– volání se dají řetězit

strana 30

Page 31: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

jQuery

• umožňuje:

– práci s DOM

– práci s událostmi

– AJAX, AJAJ

– efekty a animace

– pluginy pro rozšíření

• např. i knihovny pro UI prvky - jQuery UI

– základ pro jiné knihovny (např.

Bootstrap)

strana 31

Page 32: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

jQuery

• nevýhody

– metody mají mnoho kombinací

argumentů a podle nich se chovají

• rozsáhlá dokumentace (až moc)

– odstíní čistý JS (není vhodné pro

začátečníky)

• člověk neví, co je JS a co jQuery

– zavádí vlastní API, které nemusí umět

vše, co potřebujeme (fasáda)

strana 32

jQuery není

framework a není

vhodné pro tvorbu

rozsáhlých aplikací!

Page 33: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

jQuery - použití

• stažení jQuery a přidání souboru do

hlavičky pomocí <script>

– http://jquery.com/

– obvykle před spuštěním vlastního JS

strana 33

Page 34: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Hledání v DOM pomocí CSS selektoru

$("#odstavec").…

$("div p.popis").…

$("form input[type=text]").…

• Vrací obecně kolekci prvků

var vse = $("…").get();

var prvni = $("…").get(0);

strana 34

Page 35: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Hledání v kontextu (podstrom)

strana 35

var elem = document.getEle…

$("div.neco", elem).…

hledá jen uvnitř

elem

Page 36: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Umí obalit i existující DOM objekt

nebo HTML

var elem = document.getEle…

$(elem).…

var $h1 = $("<h1>…</h1>");

strana 36

Page 37: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Modifikace DOM

//vlozi jako lastChild

$("…").append("<a href=\"…\">…</a>");

$("…").append( $("h1#presune") );

var element = document.get…

$("…").append( element );

//vlozi jako firstChild

$("…").prepend("<p>test</p>");

strana 37

Page 38: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Modifikace DOM

$("…").empty(); //vyprazdnit

$("…").remove(); //odstranit

$("…").remove("span.jen_toto");

var $elems = $("…").detach(); //odpojit

strana 38

Page 39: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Modifikace DOM

$("…").after("<p>vlozi za</p>");

$("…").before("<p>vlozi pred</p>");

strana 39

Page 40: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Nastavení/zjištění HTML obsahu

$("…").html("<p>novy obsah</p>");

$("…").html(); //vraci HTML

$("…").text("<p>jen text</p>");

$("…").text(); //vraci text

https://jsfiddle.net/2cpy1op7/

strana 40

Pozor na XSS!

Page 41: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Registrace událostí - na objekt

$(window).load(function() {

});

$(document).ready(function() {

});

strana 41

Page 42: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Registrace událostí - pomocí selektoru

$("…").click(function() {

});

$("…").on("…", function() {

});

$("…").off("…"[, handler]);

strana 42

selektor obecně vrací pole

známé události

přímo

libovolné

Page 43: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

HTML Atributy

$("…").attr("name");

$("…").attr("name", value);

$("img").attr("src", "…");

$("a").attr("href", "…");

$("…").prop("checked");

$("…").removeAttr("name");

$("…").removeProp("name");

strana 43

attr je jen string

Page 44: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

HTML Atributy - CSS třídy

$("…").hasClass("name");

$("…").addClass("name");

$("…").removeClass("name");

$("…").toggleClass("name");

https://jsfiddle.net/bu0ftLgv/

strana 44

Page 45: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Modifikace CSS

$("…").css("prop", "value");

$("…").css(

{

"prop1": "value2",

"prop2": "value2"

}

);

https://jsfiddle.net/jdnh0c05/

strana 45

JSON

Page 46: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Data atribut

$("…").data("cokoliv");

$("…").data("cokoliv", …);

<div data-cokoliv="…">…</div>

https://jsfiddle.net/w3w333L6/

strana 46

getter i

setter

Page 47: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

AJAX v jQuery

• Metody:

– $.ajax(…)

– $.getJSON(url, callback)

– $.post(…)

– $.get(…)

• Příklad

– https://jsfiddle.net/tjmw224b/

strana 47

Page 48: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

jQuery - vlastní funkce - tzv "plugin"

$.fn.nazev = function(p1, p2) {

//this je výsledek volání $("…")

};

$(window).load(function() {

$("…").nazev(…, …);

});

strana 48

Page 49: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

jQuery - vlastní funkce - tzv "plugin"

$.fn.makeBold = function() {

//this je jQuery objekt

this.css("font-weight", "bold");

};

$(window).load(function() {

$("span").makeBold();

});

https://jsfiddle.net/wrejvqyf/

strana 49

Page 50: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

jQuery UI

• různé prvky

– podobné jako Bootstrap

• možnost upravit a stáhnout online

• http://jqueryui.com/download/

strana 50

v dnešní době asi

překonané

Není vhodné

kombinovat…

Page 51: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Odkazy k jQuery

• http://youmightnotneedjquery.com/

– pokud vyvíjíte knihovnu, netvořte

zbytečné závislosti

• http://vanilla-js.com/

• http://www.caniuse.com

• http://www.jquery.com

strana 51

:-)

Page 52: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

RequireJS

• Vhodné pro větší aplikace

• Zavádí do JS správu závislostí

– stromová struktura závislostí místo

ploché

– knihovna načítá skripty sama

• je nutné dodržet konvence pojmenování a

zařazení do složek

• http://requirejs.org/

strana 52

nemusím se

starat o pořadí

načtení <script>

Page 53: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

RequireJS - příklad

define("modul1", ["modul2"], function(m2) {

return objekt;

});

define("modul2", function() {

return objekt;

});

require(["modul1"], function(m1) {

});

strana 53

pole závislostí

pole závislostí https://jsfiddle.net/xynLLshy/

Page 54: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Knihovny pro šablonování

• Náhrada za generování HTML značek

a elem.innerHTML/innerText

– Handlebars

• https://handlebarsjs.com/

– Mustache

• https://github.com/janl/mustache.js

– A další...

strana 54

Jaký je v

tom rozdíl?

Page 55: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Ostatní frameworky a knihovny

• někdy zavádí odlišný způsob práce

• každému vyhovuje něco jiného

• čistý JS je dobrý, pokud ho člověk

ovládne

– Pro menší aplikace

– jQuery má omezené využití a vede na

špagetový kód

– problém jsou prohlížeče a odlišnosti v jejich

API + těžkopádné DOM API prohlížeče

strana 55

Page 56: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Problém k zamyšlení

• Lze jen pomocí jQuery pohodlně

realizovat i rozsáhlé prezentace nebo

přímo aplikace?

• Lze nějak zjednodušit tvorbu JS

aplikací?

strana 56

Page 57: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Stahování JS knihoven

• Ručně

– Z konkrétní stránky

• NPM

– Repositář na https://npmjs.com

– Pomocí npm install ...

– Knihovny v node_modules

• Spousta zbytečných souborů

• Bundler nebo jiná

automatizace

strana 57

Něco jako

Composer v

PHP

Page 58: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Jazyky kompilované do JS

• správně tzv. "transpilace"

• lze psát kód v jiném jazyku a

kompilovat jej do JS

– TypeScript (řešení od MS)

– CoffeeScript (zajímavá syntaxe)

– Dart (statické typování, Google)

– …

strana 58

Page 59: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Odkazy

• http://coffeescript.org/

• https://www.dartlang.org/

• http://www.typescriptlang.org/

strana 59

Page 60: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

NodeJS

• Běhové prostředí JS

– Umožní spouštět JS jako programy v

příkazové řádce

– Obsahuje a umožňuje používat NPM

– Žádný DOM, žádné XMLHttpRequest

apod.

• https://nodejs.org/

strana 60

Není to prohlížeč!

Page 61: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

strana 61

Page 62: Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 2. 4. 2019lysek/data/wa/prezentace06.pdfjQuery •nevýhody –metody mají mnoho kombinací argumentů a podle nich se chovají •rozsáhlá

Checkpoint

• Má jQuery ještě smysl?

• Jaký je rozdíl a použití fasády nebo

polyfill knihovny?

• Myslíte, že je nutné o konkrétních JS

knihovnách přednášet nebo je to věc

individuální volby a samostudia?

• Jsou nástroje jako NPM potřeba, co

přináší?

strana 62


Recommended