ugrás a tartalomhoz

The Dojo Toolkit - Unbeatable JavaScript Tools

sirkalmi · 2010. Május. 12. (Sze), 10.22
Szervusztok!

Azt szeretném kideríteni, hogy használja-e egyáltalán valaki ezt a keretrendszert Magyarországon rajtam kívül? Nagyon nagy képességű hasznos eszköz, melyet aktívan használok azonban, ha egy problémára megoldást keresek szinte soha nem kapok magyar nyelvű találatot. Angolt is csak nehezen néha. Jó volna egy hely ahol a tapasztalatokat, problámákat meg tudnám beszélni de nem nagyon találok ilyen helyet. Az egyedüli támasztékot gyarkorlatilag egy elég szűkszavű API és egy gyakrolati példatár adja.
Ezek segítségével is nagyon sokat el lehet érni, azonban egy gyors, rutinos válasz adott esetben sok ősz hajszáltól megkímél adott esetben. :-)

Köszönöm a válaszoat!

sirkalmi
 
1

Gyere el a mai JavaScript

Török Gábor · 2010. Május. 12. (Sze), 11.29
Gyere el a mai JavaScript meetupra. Épp a Dojoról fogok előadni :) A Dojo valóban rendkívüli eszköz, de kritikán aluli a dokumentáltsága. A közel jövőben tervezek több cikket is írni a Weblaborra a Dojo szolgáltatásairól, módszereiről.
2

Messze van az :-)

sirkalmi · 2010. Május. 12. (Sze), 13.52
Szervusz Gábor!

Köszi az invitálást de pécsi létemre egy kissé nagy kiruccanás volna. :-) A letölthető anyagokat az előadással kapcsolatban kiváncsian várom! Kihasználva az alkalmat, hogy szakértővel van dolgom, esetleg az alőadás anyagába betehetnéd, hogy miben különbözik a dojo.subscribe a dojo.connect-től! ;-)

Minden jót!

sirkalmi
3

pp online közvetíti az

Török Gábor · 2010. Május. 12. (Sze), 14.04
pp online közvetíti az előadásokat.

A dojo.connect DOM eseménykezelők felfűzésére való. A dojo.subscribe a Dojo saját, DOM-tól független eseménykezelő alrendszerében használható események meghirdetésére.
4

Vakarom a fülem tövét

sirkalmi · 2010. Május. 12. (Sze), 15.09
Nem mondom, hogy teljesen érte de valamit kapizsgálok. A dojo.subscribe-ot egészen tegnapig nem kellett használnom soha, aztán egy olyan feladatot kellett végrehalytanom amire végül ez volt a jó megoldás.

Adott egy dijit.layout.TabContainer benne dijit.layout.ContentPane -ekkel. Minden fülecskére kattintva betöltődik az adott pane tartalma. Ki szerettem volna bővíteni, hogy klikkeléskor ne csak a pane tartalma töltődjék be, hanem egyéb metódusok is fussanak le. Első körben a pane-ekre onClick eseményeket tettem de nem futott le, aztán a container-re próbáltam dojo.connect-el onChange-et tenni de az sem futott le, végül egy kiguglizott dojo.subscribe működni kezdett:

dojo.addOnLoad(function() {
  dojo.subscribe("tabsControl-selectChild", function(child){
    switch(child.id) {
      case 'tabsControl_home' : alert('home'); break;
      case 'tabsControl_construction' : alert('construction'); break;
      case 'tabsControl_cases' : alert('cases'); break;
      case 'tabsControl_moduls' : alert('moduls'); break;
    }
  });
});
Valami érdekes dolog ez, nem egészen értem, annyi bizonyos, hogy az első string típusu paramétert oly módon dolgozza fel, hogy a kötőjel előtti résznek az id-nak kell lennie amihez hozzárendeljük az eseményt.

Az API szerint a dijit.layout.TabContainer-ben nincs is esemény kezelés. Nincs event summary rész benne. dijit.layout.AccordionContaner dettó.

sirkalmi
5

A dojo.publish-lal bejelenthetsz egy hírt

Török Gábor · 2010. Május. 12. (Sze), 15.44
A dojo.publish-lal bejelenthetsz egy hírt. A bejelentést követően lefutnak azok a callbackek, akik ennek a hírnek a bejelentésére vártak. Egy hírhez a dojo.subscribe-bal tudsz felfűzni callbackeket.

dojo.subscribe("mese vége", function() {
  console.log("Tévé maci ágyba bújik");
});
dojo.subscribe("mese vége", function() {
  console.log("Jó éjszakát gyerekek!");
});
// ...
dojo.publish("mese vége");
// Tévé maci ágyba bújik
// Jó éjszakát gyerekek!
Ez még annyival bővíthető, hogy a dojo.publish-nak második paraméterként átadott tömb elemek a callback függvény argumentumai lesznek.

A bejelentett hír bármi lehet. A dijit.layout.TabContainer is ezt az eseménykezelő alréteget használja. Egy fül aktiválásakor ID-selectChild típusú hírt közöl. Ezt a hírt te figyelheted, és eszerint vezérelheted az alkalmazásod. Azért praktikus ez, mert egyfelől kattintásra még nem feltétlenül történt tabváltás (így nem kell neked külön figyelned, hogy ugyanaz maradt-e az aktív tab), másfelől a TabContainer billentyűzettel is vezérelhető, és ha csak az onclicket kezelnéd, billentyűzetvezérelt módban nem futnának le a kívánt funkciók.
6

Azt hiszem értem

sirkalmi · 2010. Május. 12. (Sze), 16.38
Azt hiszem értem. Panaszkodtam, hogy az API-ban nincsenek dokumentálva ezek az egyedi események. Lehet, hogy mégsem ennyire borzalmas a helyzet. Elképzelhető, hogy a widget-ek egységesen nyomnak egy publish-t minden metódusuk meghívásakor?
dojo.publish("id-method_name");
Mert létezik selectChild metódusa a TabContainer-nek, tehát nem csak egy név ez. Ha így van akkor ez remek dolog és azért nincs dokumentálva, mert ez szerint egyértelmű volna a használata. :-)

sirkalmi
7

Utánanéztem

Török Gábor · 2010. Május. 12. (Sze), 16.56
Utánanéztem, a dijit.layout.StackContainer ősosztály jelenti be ezeket a híreket. (Tehát nem automatizált folyamat.)

./StackContainer.js:76: dojo.publish(this.id+"-startup", [{children: children, selected: selected}]);
./StackContainer.js:114: dojo.publish(this.id+"-addChild", [child, insertIndex]);
./StackContainer.js:137: dojo.publish(this.id + "-removeChild", [page]);
./StackContainer.js:173: dojo.publish(this.id+"-selectChild", [page]);
./StackContainer.js:228: dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]);

A kézikönyv TabContainer fejezetében szó esik a pub-subról.