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

Subscribe
Upozornit na
guest
17 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
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

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.