Přejít k navigační liště

Zdroják » JavaScript » Začínáme používat Dojo Toolkit

Začínáme používat Dojo Toolkit

Články JavaScript, Různé

Dojo Toolkit patří mezi populární javascriptové frameworky. V nadcházející sérii článků vám představíme jeho základní vlastnosti. Dnes začneme obecnými informacemi.

Tento článek je překladem anglického originálu vydaného na portálu Dev.Opera.

Úvod

Dojo Toolkit je kolekcí javascriptových komponent, které mají pomoct webovému vývojáři. Základem je dojo.js, který obsahuje kolekci „nezbytných“ API pro nejčastější použití a nabízí celou knihovnu funkcí. Dojo je zcela zadarmo pod duální licencí AFL a novou BSD licencí.

Dojo si můžete stáhnout nebo můžete pro začátek jednoduše použít značku <script> pro jeho načtení do existující stránky:

<script type="text/javascript" charset="utf-8" src="http://ajax.googleapis.com/ajax/libs/dojo/1.2/dojo/dojo.xd.js"></script> 

A je to! Tahle řádka nahraje Dojo Toolkit (v době psaní článku se jedná o verzi 1.2) z Google Ajax API Content Distribution Network, která používá edge-caching k tomu, aby nabídla knihovnu z geograficky nejbližšího zdroje. Celý Dojo Toolkit je dostupný jak na AOL CDN, tak na Ajax API CDN – všechny komponenty, styly i obrázky.

Můžete se podívat na pěkné představení dostupných komponent nebo na kompletní přehled API, abyste získali představu o objemu nabízených funkcí. Dojo QuickStart guide dobře popisuje základní koncepty a DojoCampus je skvělým centrem plným dokumentace, tutoriálů a příkladů. Wiki najdete na docs.dojocampus­.org a brzy se stane hlavním informačním zdrojem o Doju.

Motem Doja od verze 0.9 je: „less Magic“. API je jasné, stručné, konzistentní, obsahuje jmenné prostory a je rozšiřitelné, obsahuje minimum předpokladů (pokud vůbec nějaké) o tom, co vlastně chcete. Každou komponentu můžete používat k obrazu svému. Každá vlastnost je doplňková a volitelná.

Několik faktů:

  • Dojo je malá knihovna – 26 KB v komprimované podobě, s možnostmi ořezání až na 6 KB.
  • Dojo podporuje všechny selektory CSS3.
  • Dojo podporuje všechny běžné prohlížeče: Operu 9+, FF2+, Safari 3+ a IE6+
    • Dijit (knihovna pro tvorbu UI, která je součástí Dojo Toolkitu) aktuálně nemá podporu pro Operu 9, ale přesto funguje. Některé vlastnosti Opery znemožňují, aby Dijit oznámil „oficiální“ podporu, každopádně vývoj je otevřený, a patche pro zlepšení podpory vítáme.
  • Dojo má velkou skupinu core vývojářů pracujících z různých koutů světa.
  • Dojo je pod dvojí licencí: pod novou BSD licencí nebo pod AFL.
  • DojoX nabízí bezpočet pluginů, podobně licencovaných. Kreslení na straně prohlížeče, graphické API, pokročilé IO, řada dojo.data úložišť a další.
  • U Dojo nemáte k dispozici pouze podporu komunity (na fóru, na irc.freenode.net nebo DojoCampus), existuje komerční podpora od SitePen s garancí výsledků. Dojo má dále podporu celé řady společností webového průmyslu.

Co tedy dostanu?

Na straně klienta malý soubor dojo.js obsahující poměrně dost funkcí. Soubor dojo.js je označován jako Base Dojo – s nejstabilnějšími, nejužitečnějšími a nejčastějšími funkcemi pro všechny webové vývojáře. Bez zabíhání do zbytečných detailů (to by bylo na dlouhý článek), si nyní ukážeme přehled nástrojů obsažených v Base Dojo.

dojo.addOnLoad

Zaregistruje funkci, která bude spuštěna, jakmile bude stránka připravena. To zahrnuje i nahrání dalších komponent balíčkovacího systému Doja. dojo.addOnLoad jako argument bere funkci, viz:

dojo.addOnLoad(function() {
  console.log("Připraven!")
}); 

Jedná se o nezbytný krok při práci s DOM. Když používáte Dojo (nebo další toolkity), neměli byste přidávat handlery přímo do onLoad události dokumentu.

dojo.require

Nahraje moduly nebo komponenty ve jmenném prostoru. Pokud chcete například nahrát pluginy pro pokročilé animace, použijete:

dojo.require("dojo.fx");
dojo.require("dojo.fx.easing");
dojo.addOnLoad(function() {
  console.log("Hotovo. Včetně závislostí!")
}); 

Všechny moduly, balíčky nebo pluginy (ať už je nazýváte, jak chcete) budou nahrány včetně svých závislostí. Událost dojo.addOnLoad je vyvolána až po vyřešení všech závislostí.

Alternativními nástroji jsou: dojo.requireIf (podmíněné načtení), dojo.provide (upozornění, že modul je v systému a nemá se znovu nahrávat).

Vzájemnou kombinací dojo.require a dojo.addOnLoad vytvoříme jedinečný způsob pro líné načítání (lazy-load) zdrojů. Můžete zahrnout základní dojo.js do vaší stránky a pak volat dojo.require() z addOnLoad  funkce:

// se samotným dojo.js se prakticky jedná o document.ready:
dojo.addOnLoad(function() {
  // stránka je zobrazena, přidáme náš kód:
  dojo.require("dijit.Dialog");
  dojo.addOnLoad(function() {
    // Dialog a případné další závolosti jsou vyřešeny:
    var thinger = new dijit.Dialog( {
      title:"A Modal Dialog",
      href:"remote.html"
    });
    thinger.startup();
    // zobraz dialog:
    thinger.show();
  });}); 

V tomto příkladu jsme prvně použili jmenný prostor dijit. Dijit je volitelné rozšíření Dojo Core. Příklad výše by potřeboval ještě téma vzhledu, aby vypadal „dobře“, o tom se zmíníme později, ale pokud jste netrpěliví, vyzkoušejte:

<head>
<link rel="stylesheet"  href="http://ajax.googleapis.com/ajax/libs/dojo/1.2.0/dijit/themes/tundra/tundra.css" />

<script type="text/javascript" charset="utf-8"
    src="http://ajax.googleapis.com/ajax/libs/dojo/1.2.0/dojo/dojo.xd.js">
</script>

</head>
<body class="tundra">
<h2>Hello, Dijit</h2>

</body> 

Přidali jsme jeden stylopis a class="tundra" ke značce body. Tím jsme nastavili téma vzhledu ‚tundra‘ pro celou stránku. Dojo obsahuje i další dvě témata vzhledu soria a nihilo, jedná se o sady stylopisů a obrázků, můžete si proto snadno vytvořit vlastní téma vzhledu.

dojo.byId

Jedná se o alias k document.getElementById, ale funguje i v několika případech, kde by getElementById nešel použít. dojo.byId vrací nativní DOM Node, se kterým můžete dál přímo pracovat. A jeho zápis je kratší.

dojo.addOnLoad(function() {
  dojo.byId("someNode").innerHTML = "Nějaký nový obsah.";
}); 

Všimněte si, že příklady výše jsou obaleny ve volání addOnLoad, čímž zajistíme, že náš kód bude spuštěn, až když bude celý DOM připraven.

dojo.connect – napojování událostí

Nebo také: „one-to-one“ komunikace. Tato funkce dokáže napojit jakoukoliv událost DOM na jakýkoliv element a nabízí tak poměrně silné rozhraní. Události jsou normalizované napříč prohlížeči a v některých případech jsou „syntetizovány“. Můžete tak například spojit handler onclick na jednoduchý element:

dojo.addOnLoad(function() {
  var node = dojo.byId("someNode");
  dojo.connect(node, "onclick", function(event) {
    console.log("uživatel kliknul na someNode: ", event.target);
  });}); 

Ovšem Dojo connect nabízí napojení na jakýkoliv objekt. Můžete kupříkladu zavolat funkci, kdykoli je vyvolána metoda dojo.require() jako v následujícím případě:

var handle = dojo.connect(dojo, "require", function(arg) {
  console.log("Bylo voláno require() s argumenty: ", arg)
  dojo.disconnect(handle);
});
dojo.require("dojo.io.iframe"); 

dojo.connect předává napojené funkci argumenty, jak můžete vidět na příkladu anonymní funkce výše. Zavoláním dojo.disconnect na závěr funkce v dojo.connect zajistíme, že naše funkce bude vyvolána pouze jednou.

dojo.connect dokáže pracovat nejen s událostmi DOM. Jakákoliv metoda nebo funkce může sloužit jako událost

var myObj = {
  foo:"bar",
  baz: function(e) {
    console.log(this.foo);
},
bam: function(e) {
  this.foo = "barbar";
}
};
// zavolej myObj.bam() když se spustí baz()
dojo.connect(myObj, "baz", myObj, "bam");
myObj.baz(); 

Třetí parametr je kontext (scope), ve kterém bude funkce spuštěna. Můžete předat pojmenovanou funkci jako v příkladu výše nebo anonymní funkci:

var myObj = {
  foo:"bar",
  baz: function(e){
  console.log(this.foo);
},
bam: function(e) {
  this.foo = "barbar";
}
};
// zavolej anonymní funkci v kontextu myObj, když je zavolána bam()
dojo.connect(myObj, "bam", myObj, function() {
  // tento kód bude spuště po funkci bam
  this.foo = "otherbar";
  this.baz();
});
myObj.bam(); 

K zajištění přepnutí kontextu se používá dojo.hitch(), jedná se o velmi mocnou a užitečnou vlastnost, jakmile pochopíte, jak funguje. Už vás nebudou trápit události vyvolávané v kontextu window namísto místa, kde byl handler definován.

Pokračování příště.

Tento článek je překladem textu Introducing The Dojo Toolkit a je zde zveřejněn s laskavým svolením Opera Software.

Komentáře

Odebírat
Upozornit na
guest
17 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře
v6ak

Jak se to vlastně vyslovuje?

v6ak

Já bych spíš než [doudžo] čekal [dodžou].

toka

No, doufejme, že nemá Dojo japonské předky (http://en.wikipedia.org/wiki/Dojo),
to by se nám to ještě zkomplikovalo…

v6ak

No, když se podívám na logo, tak bych řekl, že to je
z Japonštiny…

toka

I tak by to ale mělo znít [doudžou], viz http://www.japaneselifestyle.com.au/…nciation.htm.
Je tu nějaký „japanolog“, který by to uvedl na pravou míru?

alcoholic anonymous

dódžó (どうじょう)

Wiii

Co je lepší ? dojo nebo jQuery ? Mám praktickou zkušenost s jQ a ve
všem mi plně vyhovuje, co nabídne navíc dojo ?

aprilchild

tohle neres a drz se sevce sveho kopyta..:) na podobne blbe otazky, se
odpovedet neda.

toka

Díval jsem se kdysi na oboje, když jsem se snažil rozhodovat o tom, ke
kterému že frameworku se uchýlit (s úchylkou to nemá nic společného
;-)), a Dojo mi nějak nesedl, nevím jak popsat přesně proč, ale s jQuery
se mi prostě pracuje mnohem lépe.

Jiří Knesl

Není lepší/horší. Je jiné.

Nejdřív zkuste shrnout, k čemu chcete javascriptový framework použít,
jaké máte na javascript nároky a kolik času chcete investovat do
naučení.

Nick

Dojo [čti dodžo] je velmi suprový nástroj pro práci s UI. jQuery je
zase o něco jednodušší.

Osobně na backend používám dojo – suprově mají zmáknuté
rozšiřování tříd, výhoda namespaces je jasná.

Na Frontend, kde mi záleží na tom, abych dělal věci, které podporují
ajax a aby mi aplikace fungovali i tam, kde je javascript vypnutý používám
jQuery.

Každý si ale musí osahat to své, co mu vyhovuje…

R

nixxy

Chlape rozdil je jasnej.

jQuery je „maly“ framework, ktery s lehkou pouzitelnosti na manipulaci
v DOM, animacich a podobne…je to takova malicka knihovnicka, ke ktere je
spousta malickych pluginu…

Dojo je velkej framework (plnohodnotny) v plne palbe se vsim
vsudy…(locales, date, form prvky, X nastroje…) kdybych to mel prirovnat
k PHP, tak bych rekl, ze svuj/muj vlastni malinky frameworcicek je dobry na
malinke aplikace, ale postavis na nem i velkou, i kdyz tam uz se vyhoda
ztraci – jQuery.

Oproti tomu Dojo je takovy Zend Framework – jadro vice nez velke, mnoho
knihoven, velke moznosti, ovsem na malicke aplikace neni vhodny.

P.S. Prirovnani mozna pro zkusenejsi zavadejici (neni presne), ale pro
„zacatecnika“ prorovnani pochopitelne ;)

jaro

Dakujem za uvod do dojo. Dojo Core je presne to co som hladal: Riesenie pre
manipulaciu s DOM a navesovanie udalosti bez ohladu na browser. Tesim sa na
pokracovanie serialu

srott

To má asi každý js toolkit z YUI/Mochikit/Do­jo/Prototype/jQu­ery
(vačšina z nich je menej ukecaná (asi okrem yui)) .

erp

vazeni kolegove,

nemam skoro zadne zkusenosti s webovou problematikou, leta pracuji na
aplikacnich systemech (podnikove IS) a nyni stojime pred nasledujici
problematikou:

Stavajici aplikacni server komunikuje s klienty (c++) pomoci proprieterniho
protokolu (protokol je open a znam). Klient zasila pozadavky a server odpovida
nejak formatovanymi daty (plain text). Klient (c++) si data rozhazi do policek,
nebo da do datagridu ci jinych widgetu.

Zamysleno je, ze jednoduchou upravou (rozsirenim) servru by bylo mozno
odpovidat ne c++-klientovi , ale prohlizeci. Nejbliz se mi stavajici situaci
jevi napr. YUI od yahoo, zde jsou na strane klienta take jakesi widgety, ktere
drzi (zobrazuji) data a pres nejake eventy (?) je mozno generovat dotazy smerem
k servru.

Procitame si s kolegy pozorne clanky jako tento, nebot jsme nazoru, ze nejen
YUI ale i treba zde popisovany framework by se mohl hodit.

Zajimalo by me, zda nema nahodou nejake zkusenosti s podobnou problematikou
a co by mohl doporucit.

Nick

Hola, pro takovouto komunikaci je nejlepší komunikovat v XML formátu
nebo JSON.

Nastudujte si problematiku XML-RPC nebo SOAP – XML-RPC je o něco
jednodušší.

Jak YUI tak DOJO jsou frameworky, které jsou dobré pro AJAXové volání
/pokud budete chtít ajaxu využít/.

Nick

Přístupnost není jen o splnění norem: nový pohled na inkluzivní design

Přístupnost a inkluze možná nepatří mezi nejžhavější témata digitálního světa – dokud o nich nezačne mluvit Vitaly Friedman. Na WebExpo 2024 předvedl, že inkluzivní design není jen o splněných checkboxech, ale hlavně o lidech. S energií sobě vlastní obrátil zažité přístupy naruby a ukázal, že skutečně přístupný web je nejen možný, ale i nezbytný.

Efektivnější vývoj UI nebo API: Co si odnést z WebExpo 2025?

Různé
Komentáře: 0
Jak snadno implementovat moderní uživatelské rozhraní? Které funkce brzdí rychlost vašeho webu? A kdy raději sami přibrzdit, abychom využitím AI nepřekročili etické principy? Debatu aktuálních dev témat rozdmýchá sedmnáctý ročník technologické konference WebExpo, která proběhne v Praze od 28. do 30. května. Který talk či workshop si rozhodně nenechat ujít? Toto je náš redakční výběr z vývojářských hroznů.

Zapřáhněte AI jako nikdy předtím. Květnová konference WebExpo přivítá hvězdy technologického světa

Od 28. do 30. května 2025 promění pražský Palác Lucerna na tři dny technologická konference WebExpo. Na programu je více než 80 přednášek a workshopů od expertů z celého světa. WebExpo tradičně propojuje vývojáře, designéry, marketéry i byznysové lídry a nabízí praktické dovednosti, strategické myšlení a přináší nejnovější trendy nejen v oblasti AI.