introduction to dojo
DESCRIPTION
TRANSCRIPT
© 2010 IBM Corporation2
What is Dojo
A toolkit that enables the creation of modern web applications
An open source project
Friendly license
Developed by a community of experts
Used by many companies– IBM, AOL, Sun,…
Professional support is available too– Uxebu, Sitepen
© 2010 IBM Corporation3
What is Dojo built of
Core– Basic libraries: Ajax , events, DOM querying, animation, dnd, i18n and localization, data
abstraction Dijit
– Fully accessible and localized predefined set of widgets– Widgetcrafting - mechanisms to create your own widgets
Dojox– Numerous experimental modules that extend the core functionality
• Grid , wiring, client side templating, charting, more widgets, specific data stores and more and more…
Utilities– Build system– Unit testing
© 2010 IBM Corporation4
Dojo core
© 2010 IBM Corporation5
“In theory there is no difference between theory and practice. In practice there is”
Yogi Berra
© 2010 IBM Corporation6
DOM buffering
The DOM is the internal representation of the page within the browser– Can be manipulated using JavaScript APIs– These APIs are not consistent in all of the browsers (IE…)
Dojo provides a layer that hides this shame– Handling the DOM tree
• Querying using css selector syntax: dojo.query • Locating elements by id – dojo.byId
– Lifecycle of a DOM element: dojo.create , dojo.place, dojo.destroy– Attributes handling:
• Setting and gettting - dojo.attr • Removing and quering - dojo.removeAttr, dojo.hasAttr
© 2010 IBM Corporation7
CSS engine buffering
CSS allows the developer to set how things are presented on the browser– Each browser has it own CSS engine– The syntax and semantic of CSS is not consistent in all of the browsers (IE…)
Dojo provides a layer that hides this shame– Getting and setting styles – dojo.style– Class management – dojo.hasClass, dojo.addClass, dojo.removeClass, dojo.toggleClass– Position –querying for the location of a DOM node dojo.position– Layout – getting and setting the layout properties of a DOM node:
dojo.marginBox, dojo.contentBox
© 2010 IBM Corporation8
Enhancements to core JavaScript
Handling arrays
dojo.forEach, dojo.some, dojo.every, dojo.filter, dojo.indexOf Extending strings
– dojo.trim, dojo.replace General utilities
– Type checking• dojo.isString, dojo.isArray, dojo.isFunction, dojo.isObject
– Ensuring that a function would run in a specific context
dojo.hitch – Cloning of nodes
dojo.clone
© 2010 IBM Corporation9
© 2010 IBM Corporation10
Name spaces
A name space is an “region” in the product/ project
Dojo allows developers to define a name space and use it
Uses dot notation fo a sub-foldering – Just like Java packages
Create Name space: – Dojo.registerModulePath(“MySoftware”, “../../mySoftware”)– The path is either:
• relative to the dojo installation location• A URL
© 2010 IBM Corporation11
Name spaces – using a name space
Create a resource: – dojo.provide(“MySotware.MyClass”)– This call receives a a parameter a full description of the resource
• The name of the namespace • The relative path to the resource• The name of the resource
– Each file in the name space must have one dojo.provide call at its top• No more, no less
Use a resource:– dojo.require(“MySoftware.MyClass”)– This call receives as a parameter a full description of a resource
© 2010 IBM Corporation12
Communication
The three layers of communication in a web application:
– Within the client side
– From the client to its server
– From the client to another server
© 2010 IBM Corporation13
Client side communication: point to point
Each method invocation of each object can be listened by another object
dojo.connect(srcObject, srcMethod, targetObject, targetMethod)– After the srcMethod is executed within the srcObject, targetMethod is invoked within
targetObject• And receives the same arguments as srcMethod received
– This is a point to point communication – someone connects the source directly to the target
– Note that any method can be connected to• Based on the dynamic nature of Javascript
© 2010 IBM Corporation14
Client side communication: publish/subscribe
Topic – object can broadcast a topic – alongside an info object
dojo.publish(“theTopicName”,infoObject)– Other objects can register to this topic and execute a function when the topic gets fired
• This function receives the info object as a parameter
dojo.subscribe(“theTopicName”, aFunction)– This is a publish / subscribe communication
• The sender and receiver are hooked up to a dojo service and not one to the other
© 2010 IBM Corporation15
Client - server communication
Contact your server
dojo.{xhrGet, xhrPut, xhrPost, xhrDelete}(argumentsObject)– The arguments object is built of
• The url• How to parse the content that was returned by the response (text, json …)• What to do when the call succeeds• What to do when the call don’t succeeds
Contact any server – not limited to the original domain :– dojo.io.iframe : allows for background form submission, file uploads– dojo.io.script: allows script fetching and executing
© 2010 IBM Corporation16
Objects – OO and manipulation
Simulating class declaration using dojo.declare– You need to provide:
• The class name, • Its superclasses (multiple inheritance)• Its methods and members
Simulating superclass injection using dojo.delegate– Getting methods and members that don’t exist in one object from another object
Merging two object to become one using dojo.mixin
© 2010 IBM Corporation17
A few more goodies
Internationalization – using a resource bundle based on the locale Localization – adapting the presentation of time, date, number and currency to the locale Drag and drop Animation Browser history management Cookies manipulation …
© 2010 IBM Corporation18
Dijit
© 2010 IBM Corporation19
What is dijit
The dojo component that is responsible for handling widgets Fully accessible Fully localized Provides a rich set of widgets
– General usage widgets– Layout widgets– Form widgets
Provides several themes and allows developers to provide themes of their own Provides mechanisms for developers to develop new widgets using dojo’s OO approach for
modules– By extending existing widgets– By creating brand new widgets
© 2010 IBM Corporation20
What is a widget
A widget is an object, that contains not just logic, but also a way to be presented on the screen
– The way a widget is presented is the widget’s template
Widget can contain other widgets
© 2010 IBM Corporation21
Using widgets
Declarative - using widgets in the markup
<button dojoType=“dijit.form.Button”></button>
<div dojoType=“dijit.form.Button”></div>
Programmatic creation:
var theButton = new dijit.form.Button();
someNode.appendChild(theButton.domNode);
© 2010 IBM Corporation22
General widgets
General purpose widgets that are used to make a web page more “application-like” Menu Dialogs Inline editing Toolbar ProgressBar Tree – that can be connected to data source Rich text editor – with plugins architecture to configure the editor’s functions
There are many more general widgets in dojoX
© 2010 IBM Corporation23
Layout widgets
A layout widget is a widget that contains other widgets and defines how they will be placed on the screen
– Usually contains a set of panes and responsible to lay them around BorderContainer: splits the screen with border between the different areas StackContainer, TabContainer, AccordionContainer
– Show only one at any given time, the type of the container defines how to toggle between the panes
There are many more layout widgets in dojoX
© 2010 IBM Corporation24
Form widgets
Form widgets are widgets that are used to get input from users, usually as part of a web form
Text base input – Several predefined types – number, currency, general text, multi line– User can define constraints (e.g., required)– User can provide validating regular expression (e.g., for URLs)– Range based validation for numeric input
Time and date – using calendar and time selector Selection
– DropDownButton– ComboButton– RadioButton– CheckboxButton
There are many more form widgets in dojoX
© 2010 IBM Corporation25
What makes a widget
A widget is composed of two resources– A .js file that contains the logic of the widget– An html snippet that contains the way the widget is presented
• This resource is called the widget’s template• The html code itself can be in another file or inlined in the .js file
This allows later on to perform runtime optimizations, by placing the template in a separate file during development time, and inline it as part of the build process
© 2010 IBM Corporation26
What makes a widget – cont.
Dojo allows the template and the widget’s object to interact– By defining nodes in the template as members of the widget’s object
<div dojoAttachPoint=“myDiv”>– By connecting events of nodes in the template to methods in the widget’s object
<div dojoAttachEvent=“onmouseover:handleMouseOverMyDiv”>
– Predefined variables • The template’s root DOM element is a member of the widget’s object - domNode• The place in the widget’s DOM tree where other elements may be automatically
added - containerNode
© 2010 IBM Corporation27
<div> <table><tbody><tr><td dojoAttachPoint=“v1”>….</td><td dojoAttachEvent=“onclick:a”></td></tr><tbody></table></div>
<div> <table><tbody><tr><td dojoAttachPoint=“v1”>….</td><td dojoAttachEvent=“onclick:a”></td></tr><tbody></table></div>
dojo.provide(“wid.My”);dojo.require(“dijit._Widget”);dojo.require(“dijit._Templated”);
dojo.declare(“wid.My”, dijit._Widget,dijit._Templated,{ templatePath:dojo.moduleUrl(“wid”,”my.html”); a: function(b){ …this.v1… doSomething… }});
dojo.provide(“wid.My”);dojo.require(“dijit._Widget”);dojo.require(“dijit._Templated”);
dojo.declare(“wid.My”, dijit._Widget,dijit._Templated,{ templatePath:dojo.moduleUrl(“wid”,”my.html”); a: function(b){ …this.v1… doSomething… }});
•The widget’s object knows about:
•Specific nodes in the template (using the the dojoAttachPoint attribute)
•Events fired from the template (using the dojoAttachEvent attribute)
© 2010 IBM Corporation28
Widget’s lifecycle
Widgets have a predefined lifecycle – from creation to destruction
The developer can provide code that is executed based on that lifecycle – After they were just created (constructor)– After they were connected to their inheritance chain (postMixInProperties)– After their template was created (postCreate)– After all of their internal content (mostly internal widgets) were created (startup)– Before they are destroyed (destroy)
© 2010 IBM Corporation29
Themes
A theme is a general look to a page
Several themes are defined in dijit
It is possible for developers to provide themes of their own
© 2010 IBM Corporation30
Themes - tundra
© 2010 IBM Corporation31
Themes – Soria
© 2010 IBM Corporation32
Themes - Nihilo
© 2010 IBM Corporation33
dojoX
© 2010 IBM Corporation34
What is dojoX
The experimental part of dojo
Many projects are included within it (~50)– Some of them may be removed on later releases– Not likely, though
Extending the core functionality– More widgets– More behaviors
© 2010 IBM Corporation35
What is included in dojox
Many widgets – general, form and layout Syntax highlighting Many data stores Grid UUID Xml handling File uploading Client side templating Json handling Editor plugins …
© 2010 IBM Corporation36
How to use dojo
Download it – http://www.dojotoolkit.org/
Place it in your server Add this line to your page:
<script type="text/javascript" src=“[relativePath]/dojo/dojo.js"></script>
© 2010 IBM Corporation37
More info
http://www.dojotoolkit.org/
http://dojocampus.org/
There are several books, but they become obsolete with any newer Dojo versions
© 2010 IBM Corporation38
Questions?