EntwicklerCamp 2011: Mit dojo und XPages zu einer erstklassigen User-Experience

22. Februar 2011 Posted by Bernd Hort


EntwicklerCamp/

Heute hatte ich meinen Vortrag "Mit
dojo und XPages zu einer erstklassigen User-Experience
"
beim EntwicklerCamp
2011
.

A picture named M3

Die Folien und die Beispieldatenbank
zu meinem Vortrag können entweder hier oder über die Seiten des EntwicklerCamps
heruntergeladen werden.

Ein Hinweis noch zu der Beispieldatenbank:
Da ich in dem einen Beispiel die
IBM
Extension Library
verwende, gibt
es einen Laufzeitfehler, wenn die Extension Library auf dem Server nicht
installiert ist. Um die Beispieldatenbank trotzdem zum Laufen zu bekommen,
muss zum Einen aus der XPage "NamePickerDemo" das Control entfernt
werden. Zum anderen muss in den "Advanced Properties" der Anwendungseigenschaften
das Flag für die Abhängigkeit von "com.ibm.xsp.extlib.library"
entfernt werden.


A picture named M4

dojo und Notes: Artikel 10 – dojo.dnd.Source – Drag\’n\’Drop mit drei Zeilen JavaScript

27. Dezember 2010 Posted by Bernd Hort

\"dojo-Logo\"/
Während der letzte Artikel in der dojo-Serie sich mit den dijit.Dialog beschäftigte, komme wir nun zu einem meiner Lieblingsthemen bei dojo: Drag & Drop. Es ist deswegen mein Lieblingsthema, weil es so unglaublich einfach zu benutzen ist. Wie wir gleich sehen werden, benötigen wir nur drei Zeilen JavaScript-Code, um unsere Session-Beschreibungen per Drag & Drop umsortieren zu können.
Für Drag & Drop gibt es bei dojo zwei Konzepte. Das eine Konzept bezieht sich auf das Verschieben von Elementen an eine beliebige Position auf der Webseite. Das andere Konzept ist für das Umsortieren von Elementen innerhalb eines Containers gedacht.

Für das Verschieben von Elementen wird lediglich das zugehörige Package benötigt und die Kennzeichnung des zu verschiebenden Elementes durch Angabe des dojo-Types.
//Package for moving elements
dojo.require("dojo.dnd.movable");

1. <div dojoType="dojo.dnd.Moveable"> Some Content</div>

Es kann ein Kindelement als "Handle" definiert werden, so dass dieses Element zum "Anfassen" benutzt werden kann. Das ist dann besonders wichtig, wenn der Inhalt selber editierbar ist. Ohne "Handle" könnte der Text nicht selektiert werden.
1. <div dojoType="dojo.dnd.Moveable" handle="dragHandle">
2. <div id="dragHandle"></div> <textarea>Dieser Text kann editiert werden
3. </textarea> </div>


Das Umsortieren von Elementen innerhalb eines Containers ist ebenfalls sehr praktisch und kann vielfältig eingesetzt werden. Als Container kann jedes HTML-Element dienen, das Kindelemente beinhaltet. Es ist also nicht nur auf ordered / unorderer lists beschränkt.

Neben dem obligatorischen Nachladen des Packages muss nun lediglich das Eltern-HTML-Element als Container und die Kindelemente als Drag&Drop Item gekennzeichnet werden. Es gibt die abstrakte Klasse dojo.dnd.Container und die zwei Implementierungen dojo.dnd.Source und dojo.dnd.Target. Wie die Namen vermuten lassen, dient die Source als Quelle und Target als Ziel.
//Package for sorting elements via Drag & Dropt
dojo.require("dojo.dnd.Source");

1. <div dojoType="dojo.dnd.Source">
2.  <div class="dojoDndItem">Item X</div>
3.  <div class="dojoDndItem">Item Y</div>
4.  <div class="dojoDndItem">Item Z</div>
5. </div>
Neben der Angabe des dojoType dojo.dnd.Source ist die Angabe der CSS Klasse "dojoDNDItem" der Schlüssel zum Erfolg. Der Name der CSS Klasse ist entscheidend.
\"A

In unserer Beispiel-Anwendung werden wir nun die Session-Beschreibungen als Drag & Drop Items kennzeichnen und das umschließende DIV mit der ID "Sessions" als Source definieren.
//Preparing Drag & Drop
dojo.require("dojo.dnd.Source");

dojo.query(".session").addClass("dojoDndItem");
var dndSource = new dojo.dnd.Source("sessions");
Wie versprochen nur drei Zeilen JavaScript-Code.

Es lohnt sich, das Beispiel selber ausprobieren. Halten Sie beim Verschieben auch einmal die <STRG>-Taste gedrückt.

In der zu dieser Artikelserien gehörenden Beispieldatenbank finden sie den Inhalt dieses Artikels in der Maske "webSpeedAgendaing-Step 8|SpeedAgendaing-8" und der JavaScript Bibliothek "SpeedAgendaing-Step8.js".

Im nächsten Artikel definieren wir ein passendes Ziel für unsere Sessions.