dojo.things()

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    dojo.things() - Presentation Transcript

    1. dojo.things() Peter Higgins (dante) Dojo Toolkit Project Lead ZendCon 2009 (#zendcon) October 19 - 23 Thursday, October 22, 2009
    2. me. http://twitter.com/phiggins http://dante.dojotoolkit.org http://joind.in/936 Thursday, October 22, 2009
    3. Thursday, October 22, 2009
    4. The History of Dojo (über-cliffnote version) Thursday, October 22, 2009
    5. A Foundation. Thursday, October 22, 2009
    6. A Team. http://demos.dojotoolkit.org/demos/skew/ Thursday, October 22, 2009
    7. The Dojo Toolkit • Long standing Development • Friendly Professional Community • Liberally Licensed, Clean IP http://dojotoolkit.org http://dojofoundation.org Thursday, October 22, 2009
    8. What is Dojo? • Unified JavaScript Toolkit - Supafast Light-weight Base (6k - 30k) - Package System - Use at will Library - Countless tools - Exposed Foundations - Defined deprecation policies - Defined release policies Thursday, October 22, 2009
    9. http://xkcd.com/353 Thursday, October 22, 2009
    10. It’s just JavaScript. Thursday, October 22, 2009
    11. Base Dojo (aka: dojo.js) Thursday, October 22, 2009
    12. <?php echo $this->dojo() ?> Thursday, October 22, 2009
    13. What you get: • DOM: - byId, attr, place, clone, create, empty, position • CSS: - style, addClass, removeClass, toggleClass, hasClass • Ajax: - xhr, xhrGet/Post/Delete/Put, Deferred • Language: - connect, hitch, partial, delegate, declare, mixin, extend • Array: - forEach, map, filter, indexOf, lastIndexOf, some, every • JSON: - toJson, fromJson, queryToObject, objectToQuery, formToJson/Object/Query • FX: - Color Animations, anim, animateProperty, fadeIn/Out - http://download.dojotoolkit.org/current-stable/cheat.html Thursday, October 22, 2009
    14. dojo.query / dojo.NodeList • Fastest available Selector Engine - “Acme” • 1:1 pairing with dojo.* functions - dojo.style(“nodeid”, { props }) // fast - dojo.query(“#nodeid”).style({ props }) // sugar • Syntatic Sugar for events: - dojo.query(“.bar”).onclick(fnA).onmouseenter(fnB) Thursday, October 22, 2009
    15. Dojo Plugins // give all NodeList instances a hash of new functions: dojo.extend(dojo.NodeList, { color: function(color){ // set nodes to a color. getter/setter: return this.style(“color”, color); }, html: function(markup){ // set the HTML to some passed markup snippet return this.forEach(function(n){ n.innerHTML = markup; }); } }); Thursday, October 22, 2009
    16. Bling. (function($){ $(“#foo .bar”) .onclick(function(e){ // normalized ‘e’ }) .forEach(function(n){ // closed ‘n’ dojo.attr(n, “title”, “Touched”) }) .attr(“title”, “ReTouched!”) ; })(dojo.query); Thursday, October 22, 2009
    17. Package Basics • API: - provide(module) - require(module) - platformRequire(platform, module) - requireIf(someCondition, module) - registerModulePath(namespace, path) Thursday, October 22, 2009
    18. With Zend Framework ... // teh php: $this->dojo()->enable() ->registerModulePath(“myns”, “../myns”) ->requireModule(“myns.plugin”); // and js: ../myns/plugin.js dojo.provide(“myns.plugin”); (function($, d){ d.extend(d.NodeList, { ... }); d.declare(“myns.Thing”, null, { template: d.cache(“myns”, “templates/Thing.html”), constructor: function(args, node){ d.mixin(this, args); d.place(this.template, node, “replace”); } }); })(dojo.query, dojo); Thursday, October 22, 2009
    19. Using “layers” // teh php: $this->dojo()->enable() ->registerModulePath(“myns”, “../myns”) ->requireModule(“myns.kernel”); // or: $view->dojo()->addLayer(“/js/myns/kernel.js”); // and js: ../myns/kernel.js dojo.provide(“myns.kernel”); dojo.require(“myns.stuff”); dojo.require(“dojox.image.LightboxNano”); dojo.require(“myns.FirstWidget”); Thursday, October 22, 2009
    20. Ajax is eaaaaasy • All route through dojo.xhr(verb, kwArgs) • Common dojo.Deferred interface • Definable custom content handlers Thursday, October 22, 2009
    21. Ajax is eaaaaasy // basic. dojo.xhrGet({ url:”/foo”, load: function(data){ dojo.byId(“bar”).innerHTML = data; } }); // direct dfd var inflight = dojo.xhrGet({ url:”/foo” }) .addCallback(function(data){ ... }) .addErrback(function(error){ ... }) ; // alternate content-type: dojo.xhrPost({ url:”/foo/bar”, handleAs:”json”, load: function(data){ for(var i in data){ ... } } }); Thursday, October 22, 2009
    22. Custom Content Handlers // define the content-handler dojo.mixin(dojo.contentHandlers, { loadInto: function(xhr){ var n = dojo.byId(xhr.ioArgs.node); n.innerHTML = xhr.responseText; } }); // use the content-handler dojo.xhrGet({ url:”/foo”, handleAs:”loadInto”, node:”someId” }); Thursday, October 22, 2009
    23. Events • dojo.connect - DOM or Functional - Built-in scoping (everywhere!) - Explicit disconnect • Topics - publish/subscribe/unsubscribe Thursday, October 22, 2009
    24. Events var n = dojo.byId(“foo”); // plain ole’ onclick dojo.connect(n, “click”, function(e){ ... }); // calls thisObj.method(e) in scope of thisObj dojo.connect(n, “mouseenter”, thisObj, “method”); // anonymous with scope dojo.connect(n, “keydown”, thisObj, function(e){ // “this” == thisObj }); // with query: dojo.query(“#foo”) .onclick(function(e){ }) .onmouseenter(thisObj, “method”) .onkeydown(thisObj, function(e){ ... }) ; Thursday, October 22, 2009
    25. Topics // same hitching pattern: dojo.subscribe(“/are/you/listening”, function(a, b, c){ ... }); dojo.subscribe(“/are/you/listening”, thisObj, “method”); dojo.subscribe(“/are/you/listening”, thisObj, function(){ ... }); // trigger it all dojo.publish(“/are/you/listening”, [1, 2, 3]); Thursday, October 22, 2009
    26. hitch() // mini singleton var myObj = { counter:0, addOne: function(){ this.counter++; } } // more hitching pattern: dojo.connect(n, “onclick”, myObj, “addOne”); dojo.subscribe(“/who/knows”, myObj, “addOne”); var adder = dojo.hitch(myObj, “addOne”); dojo.connect(n, “mouseenter”, adder); Thursday, October 22, 2009
    27. hitch() for Classes dojo.declare(“my.Thing”, null, { url:”/foo”, message:””, loader: function(){ dojo.xhrGet({ url: this.url, load: dojo.hitch(this, “handler”) }) }, handler: function(data){ this.message = data; } }); var mt = new my.Thing(); mt.loader(); Thursday, October 22, 2009
    28. FX • dojo.animateProperty(kwArgs) • dojo.anim(node, props, ...) • dojo.fadeOut(kwArgs) • dojo.fadeIn(kwArgs) • new dojo.Animation(kwArgs) Thursday, October 22, 2009
    29. Animation Events var anim = dojo.fadeOut({ node:”bar” }); dojo.connect(anim, “onEnd”, function(n){ // animation is done }); dojo.connect(anim, “beforeBegin”, function(n){ // animation starts after this }); dojo.connect(anim, “onBegin”, function(n){ // animation just started }); anim.play(); // also onAnimate, onPlay, onStop, etc. dojo.fadeOut({ node:”baz”, onEnd:function(n){ /* inline, too */ }).play(); Thursday, October 22, 2009
    30. FX++ • dojo.require(“dojo.fx”); // or dojox.fx ... • dojo.fx.chain([animations]) • dojo.fx.combine([animations]); • dojo.fx.wipeIn/Out/slideIn/Out/etc Thursday, October 22, 2009
    31. Core Dojo Thursday, October 22, 2009
    32. dojo.require() away • dojo.data - Common API for data handling • Advanced I/O - dojo.io.script, dojo.io.iframe ... • dojo.cookie • dojo.behavior! Thursday, October 22, 2009
    33. Behavior? dojo.behavior.add({ “.foo .bar”: function(n){ // newly found }, “#baz”:{ “found”: function(n){ // also newly found }, “onclick”: function(e){ // handler } } }); dojo.behavior.apply(); Live behaviors available in `plugd` Thursday, October 22, 2009
    34. Firebug Lite Thursday, October 22, 2009
    35. Dijit (Dojo Widgets) Thursday, October 22, 2009
    36. Dijit widget system • dijit._Widget / dijit._Templated / etc • dijit.Dialog / dijit.layout.TabContainer / etc • dijit.form.ValidationTextBox / etc Thursday, October 22, 2009
    37. Declarative vs Programatic new dijit.Dialog({ title:”Hi There”, href:”/foo/bar”, id:”bar” }); <!-- same as: --> <div id=”bar” dojoType=”dijit.Dialog” title=”Hi There” href=”/foo/bar”></div> Thursday, October 22, 2009
    38. Declarative vs Programatic Zend_Dojo_View_Helper_Dojo::setUseDeclarative(); Zend_Dojo_View_Helper_Dojo::setUseProgrammatic(); Zend_Dojo_View_Helper_Dojo::setUseProgrammatic(-1); Thursday, October 22, 2009
    39. customDijit FTW! // consider: new my.Thing({ someAttribute:”something” }, “nodeid”) // versus: <div dojoType=”my.Thing” someAttribute=”something” id=”nodeid”> <p>Inner Content</p> </div> // in PHP: <?php $this->customDijit()->captureStart( ‘baaar’, array( dojoType => “my.Thing”, someAttribute => “something” ) ); ?> <p>Inner Content</p> <? php echo $this->customDijit()->captureEnd(‘baaar’); ?> Thursday, October 22, 2009
    40. DojoX (X !== experimental) Thursday, October 22, 2009
    41. DojoX, briefly. • Sandbox • Cutting Edge • Un-categorized Thursday, October 22, 2009
    42. DojoX, briefly. • dojox.gfx • dojox.charting • dojox.cometd / org.cometd • dojox.grid • dojox.widget / dojox.layout / dojox.form • dojox.image • dojox.data • dojox.rpc / SMD Thursday, October 22, 2009
    43. RPC / SMD dojo.require(“dojox.rpc.Service”); var goog = new dojox.rpc.Service(“google.smd”); goog.websearch({ q:”Dojo” }).addCallback(function(response){ // handle the responses }); goog.booksearch({ q:”Dojo” }).addBoth(function(response){ // Books about Dojo }); Thursday, October 22, 2009
    44. dojox.data Stores: • AndOrReadStore • FlickrRestStore / • AppStore FlickrStore • AtomReadStore • GoogleFeedStore • CouchDBRestStore • GoogleSearchStore • CssRuleStore • HtmlStore • CsvStore • jsonPathStore • FileStore • jsonRestStore • OpmlStore Thursday, October 22, 2009
    45. Dojo Build System Thursday, October 22, 2009
    46. All-in-One • Works transparently with Package System • Group modules into ‘layers’ • Concatenate CSS @import into ‘layers’ • Layer & File minification - Comments, Whitespace, newlines ... • stripConsole (console.warn, .log, .error) Thursday, October 22, 2009
    47. #ifdef in JavaScript? // the code: //>>excludeStart(“something”, kwArgs.condition == true); /* code to exclude */ //>>excludeStop(“something”); # exclude it: ./build.sh condition=true profile=myprofile Thursday, October 22, 2009
    48. Development Debugging // ... handler: function(data){ if(data && !data.error){ /* do something with the data */ } //>>excludeStart(“debuggykins”, true); else{ console.warn(“We require data, and didn’t get it.”); console.log(“got:”, arguments); } //>>excludeStop(“debuggykins”); }, // ... Thursday, October 22, 2009
    49. Special Builds • Stubs (6k dojo.js) • Base++ (dojo.js with modules) • Cross-Domain • plugd • Scope Burning Thursday, October 22, 2009
    50. MooJo? Thursday, October 22, 2009
    51. scopeMap + kwArgs // Dojo? Moo.load(function(){ place("<p>Hello, Moojo</p>", "container"); query("p") .style("fontSize", "10px") .animate({ fontSize:{ end: 42 } }) ; }); http://dante.dojotoolkit.org/static/otherlibs/moojo.html Thursday, October 22, 2009
    52. //>>excludeStart(“auto”, kwArgs.autoConflict == “on”) if(dojo.config.conflict){ //>>excludeStop(“auto”) // exportNS is a plugd plugin dojo.exportNS(dojo, dojo.global); //>>excludeStart(“auto”, kwArgs.autoConflict == “on”) } //>>excludeStop(“auto”) http://dante.dojotoolkit.org/static/otherlibs/moojo.html Thursday, October 22, 2009
    53. Questions? Thursday, October 22, 2009
    54. Gracias. (me, again) dante@dojotoolkit.org http://twitter.com/phiggins http://higginsforpresident.net/ http://dante.dojotoolkit.org http://joind.in/936 Thursday, October 22, 2009
    55. Some resources: http://dojotoolkit.org http://dojocampus.org/explorer http://dojocampus.org http://download.dojotoolkit.org http://docs.dojocampus.org http://demos.dojotoolkit.org Thursday, October 22, 2009
    SlideShare Zeitgeist 2009

    + Peter HigginsPeter Higgins Nominate

    custom

    372 views, 2 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 372
      • 372 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 38
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories