Re: calling destroy on templated widget not modifying dom

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: calling destroy on templated widget not modifying dom

Miller, Derek

Update:

Perhaps I misunderstood _widgetBase.destroy(); ?

If the custom widget is contained within a parent widget via parent.addChild(customWidget) ---> then calling customWidget.destroy() unregisters it from the parent (leaving its dom representation) --> and calling parent.removeChild(customWidget) removes the custom widget dom representation from the dom.

Is that the expected behavior? To chain those calls? Fine if so.... interested to hear.

Side Note: if this is the case.... how would one destroy and purge a custom widget that is not contained within a parent?

Thanks again.

- derek

-------------------------------------------------------------------------------------------------
Message: 2
Date: Thu, 8 Sep 2016 19:04:44 -0700
From: derek miller <[hidden email]>
Subject: [Dojo-interest] calling destroy on templated widget not
        modifying dom
To: [hidden email]
Message-ID:
        <CAHyPT9sRxaLNZ0V1UjbPMokDYBJzJG=[hidden email]>
Content-Type: text/plain; charset="utf-8"

I'm having issues destroying custom, templated widgets... calling
widget.destroy() is removing the widget from the registry (and its parent's descendants array, if applicable), but is not removing the widget's dom nodes from the dom.

I'm approaching this under the assumption that widgets inheriting from dijit/_WidgetBase can be removed from the registry and purged from the dom by calling the widget.destroy() method... if that's not the case -- you can correct me right here :)

I've had this issue for some time, and have been hacking it ... would like to know what I'm doing wrong.

Simple example --

widget template

<div data-dojo-attach-point='domNode'>
  <div data-dojo-attach-point='left'></div>
  <div data-dojo-attach-point='center'>${cName}</div>
  <div data-dojo-attach-point='right'></div>
</div>

widget code

define([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
  "dijit/_TemplatedMixin",
  "dojo/text!./templates/dCard.html"
  ],
  function (declare, _WidgetBase, _TemplatedMixin, template){
    return declare([_WidgetBase, _TemplatedMixin],{
      templateString:template,
      postCreate:function(){
        var domNode = this.domNode;
        this.inherited(arguments);
      },
    });
  }
);

let's assume that there's a dojox/mobile/ContentPane in the dom, var'd out as rBox

>> window.rBox = new ContentPane({id:'rBox'}).placeAt(document.body);

iterate over an array of data and create widgets

>> var data = {"records":[{"cname":"Gary Kunz"},{"cname":"Bigham,
Michael},{"cname":"Westlund, Michael"}]};

>> data.records.forEach(function(x){
      rBox.addChild(new simpleWidget({cName:x.cname}));
    });

Still with me? Now - I can call rBox.destroyDescendants(); ....
rBox.getChildren().forEach(function(child){child.destroy();}); .... I can get explicit references to the widget and call destroy on it directly...

I get the same result. The widget(s) are removed from the registry (or the parent's child array), but the widget's dom representation is staring me in the face....

I have got to be missing something... anybody have any ideas?

Thanks all. Much appreciated.

- derek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.dojotoolkit.org/pipermail/dojo-interest/attachments/20160908/e4760435/attachment.html 

------------------------------

________________
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/
Reference Guide: http://dojotoolkit.org/reference-guide
API Documentation: http://dojotoolkit.org/api

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



End of Dojo-interest Digest, Vol 141, Issue 3
*********************************************
--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest
Reply | Threaded
Open this post in threaded view
|

Re: calling destroy on templated widget not modifying dom

bradmapin
What version of dojo are you using? Last when I was working with dijit (1.9), calling widget.destroyRecursive() was the proper way to destroy a container widget. Oh yeah, also mixin dijit._Container into all widgets that contain other widgets.

On Fri, Sep 9, 2016 at 10:10 AM, Miller, Derek <[hidden email]> wrote:

Update:

Perhaps I misunderstood _widgetBase.destroy(); ?

If the custom widget is contained within a parent widget via parent.addChild(customWidget) ---> then calling customWidget.destroy() unregisters it from the parent (leaving its dom representation) --> and calling parent.removeChild(customWidget) removes the custom widget dom representation from the dom.

Is that the expected behavior? To chain those calls? Fine if so.... interested to hear.

Side Note: if this is the case.... how would one destroy and purge a custom widget that is not contained within a parent?

Thanks again.

- derek

-------------------------------------------------------------------------------------------------
Message: 2
Date: Thu, 8 Sep 2016 19:04:44 -0700
From: derek miller <[hidden email]>
Subject: [Dojo-interest] calling destroy on templated widget not
        modifying       dom
To: [hidden email]
Message-ID:
        <CAHyPT9sRxaLNZ0V1UjbPMokDYBJzJG=[hidden email]>
Content-Type: text/plain; charset="utf-8"

I'm having issues destroying custom, templated widgets... calling
widget.destroy() is removing the widget from the registry (and its parent's descendants array, if applicable), but is not removing the widget's dom nodes from the dom.

I'm approaching this under the assumption that widgets inheriting from dijit/_WidgetBase can be removed from the registry and purged from the dom by calling the widget.destroy() method... if that's not the case -- you can correct me right here :)

I've had this issue for some time, and have been hacking it ... would like to know what I'm doing wrong.

Simple example --

widget template

<div data-dojo-attach-point='domNode'>
  <div data-dojo-attach-point='left'></div>
  <div data-dojo-attach-point='center'>${cName}</div>
  <div data-dojo-attach-point='right'></div>
</div>

widget code

define([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
  "dijit/_TemplatedMixin",
  "dojo/text!./templates/dCard.html"
  ],
  function (declare, _WidgetBase, _TemplatedMixin, template){
    return declare([_WidgetBase, _TemplatedMixin],{
      templateString:template,
      postCreate:function(){
        var domNode = this.domNode;
        this.inherited(arguments);
      },
    });
  }
);

let's assume that there's a dojox/mobile/ContentPane in the dom, var'd out as rBox

>> window.rBox = new ContentPane({id:'rBox'}).placeAt(document.body);

iterate over an array of data and create widgets

>> var data = {"records":[{"cname":"Gary Kunz"},{"cname":"Bigham,
Michael},{"cname":"Westlund, Michael"}]};

>> data.records.forEach(function(x){
      rBox.addChild(new simpleWidget({cName:x.cname}));
    });

Still with me? Now - I can call rBox.destroyDescendants(); ....
rBox.getChildren().forEach(function(child){child.destroy();}); .... I can get explicit references to the widget and call destroy on it directly...

I get the same result. The widget(s) are removed from the registry (or the parent's child array), but the widget's dom representation is staring me in the face....

I have got to be missing something... anybody have any ideas?

Thanks all. Much appreciated.

- derek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.dojotoolkit.org/pipermail/dojo-interest/attachments/20160908/e4760435/attachment.html

------------------------------

________________
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/
Reference Guide: http://dojotoolkit.org/reference-guide
API Documentation: http://dojotoolkit.org/api

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



End of Dojo-interest Digest, Vol 141, Issue 3
*********************************************
--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest


--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest
Reply | Threaded
Open this post in threaded view
|

Re: calling destroy on templated widget not modifying dom

derekpdx
Currently 1.10, though I've had this issue / misunderstanding with 1.9 as well.

I've since mixed in _Contained to the custom widget... the custom widget contains no children... calling widget.destroy() gets the same results.

Calling widget.destroyRecursive() would destroy both the parent and its children, no? That's not what I'm after, regrettably.


thanks.

derek


On Fri, Sep 9, 2016 at 10:15 AM, Brad Maupin <[hidden email]> wrote:
What version of dojo are you using? Last when I was working with dijit (1.9), calling widget.destroyRecursive() was the proper way to destroy a container widget. Oh yeah, also mixin dijit._Container into all widgets that contain other widgets.

On Fri, Sep 9, 2016 at 10:10 AM, Miller, Derek <[hidden email]> wrote:

Update:

Perhaps I misunderstood _widgetBase.destroy(); ?

If the custom widget is contained within a parent widget via parent.addChild(customWidget) ---> then calling customWidget.destroy() unregisters it from the parent (leaving its dom representation) --> and calling parent.removeChild(customWidget) removes the custom widget dom representation from the dom.

Is that the expected behavior? To chain those calls? Fine if so.... interested to hear.

Side Note: if this is the case.... how would one destroy and purge a custom widget that is not contained within a parent?

Thanks again.

- derek

-------------------------------------------------------------------------------------------------
Message: 2
Date: Thu, 8 Sep 2016 19:04:44 -0700
From: derek miller <[hidden email]>
Subject: [Dojo-interest] calling destroy on templated widget not
        modifying       dom
To: [hidden email]
Message-ID:
        <CAHyPT9sRxaLNZ0V1UjbPMokDYBJzJG=[hidden email]>
Content-Type: text/plain; charset="utf-8"

I'm having issues destroying custom, templated widgets... calling
widget.destroy() is removing the widget from the registry (and its parent's descendants array, if applicable), but is not removing the widget's dom nodes from the dom.

I'm approaching this under the assumption that widgets inheriting from dijit/_WidgetBase can be removed from the registry and purged from the dom by calling the widget.destroy() method... if that's not the case -- you can correct me right here :)

I've had this issue for some time, and have been hacking it ... would like to know what I'm doing wrong.

Simple example --

widget template

<div data-dojo-attach-point='domNode'>
  <div data-dojo-attach-point='left'></div>
  <div data-dojo-attach-point='center'>${cName}</div>
  <div data-dojo-attach-point='right'></div>
</div>

widget code

define([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
  "dijit/_TemplatedMixin",
  "dojo/text!./templates/dCard.html"
  ],
  function (declare, _WidgetBase, _TemplatedMixin, template){
    return declare([_WidgetBase, _TemplatedMixin],{
      templateString:template,
      postCreate:function(){
        var domNode = this.domNode;
        this.inherited(arguments);
      },
    });
  }
);

let's assume that there's a dojox/mobile/ContentPane in the dom, var'd out as rBox

>> window.rBox = new ContentPane({id:'rBox'}).placeAt(document.body);

iterate over an array of data and create widgets

>> var data = {"records":[{"cname":"Gary Kunz"},{"cname":"Bigham,
Michael},{"cname":"Westlund, Michael"}]};

>> data.records.forEach(function(x){
      rBox.addChild(new simpleWidget({cName:x.cname}));
    });

Still with me? Now - I can call rBox.destroyDescendants(); ....
rBox.getChildren().forEach(function(child){child.destroy();}); .... I can get explicit references to the widget and call destroy on it directly...

I get the same result. The widget(s) are removed from the registry (or the parent's child array), but the widget's dom representation is staring me in the face....

I have got to be missing something... anybody have any ideas?

Thanks all. Much appreciated.

- derek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.dojotoolkit.org/pipermail/dojo-interest/attachments/20160908/e4760435/attachment.html

------------------------------

________________
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/
Reference Guide: http://dojotoolkit.org/reference-guide
API Documentation: http://dojotoolkit.org/api

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



End of Dojo-interest Digest, Vol 141, Issue 3
*********************************************
--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest


--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest
Reply | Threaded
Open this post in threaded view
|

Re: calling destroy on templated widget not modifying dom

bradmapin
The widget not destroying properly would indicate that widget.domNode is undefined or so to some other node. I doubt this is it, but I would try removing the data-dojo-attach-point="domNode" as that is not necessary.

On Fri, Sep 9, 2016 at 10:24 AM, derek miller <[hidden email]> wrote:
Currently 1.10, though I've had this issue / misunderstanding with 1.9 as well.

I've since mixed in _Contained to the custom widget... the custom widget contains no children... calling widget.destroy() gets the same results.

Calling widget.destroyRecursive() would destroy both the parent and its children, no? That's not what I'm after, regrettably.


thanks.

derek


On Fri, Sep 9, 2016 at 10:15 AM, Brad Maupin <[hidden email]> wrote:
What version of dojo are you using? Last when I was working with dijit (1.9), calling widget.destroyRecursive() was the proper way to destroy a container widget. Oh yeah, also mixin dijit._Container into all widgets that contain other widgets.

On Fri, Sep 9, 2016 at 10:10 AM, Miller, Derek <[hidden email]> wrote:

Update:

Perhaps I misunderstood _widgetBase.destroy(); ?

If the custom widget is contained within a parent widget via parent.addChild(customWidget) ---> then calling customWidget.destroy() unregisters it from the parent (leaving its dom representation) --> and calling parent.removeChild(customWidget) removes the custom widget dom representation from the dom.

Is that the expected behavior? To chain those calls? Fine if so.... interested to hear.

Side Note: if this is the case.... how would one destroy and purge a custom widget that is not contained within a parent?

Thanks again.

- derek

-------------------------------------------------------------------------------------------------
Message: 2
Date: Thu, 8 Sep 2016 19:04:44 -0700
From: derek miller <[hidden email]>
Subject: [Dojo-interest] calling destroy on templated widget not
        modifying       dom
To: [hidden email]
Message-ID:
        <CAHyPT9sRxaLNZ0V1UjbPMokDYBJzJG=[hidden email]>
Content-Type: text/plain; charset="utf-8"

I'm having issues destroying custom, templated widgets... calling
widget.destroy() is removing the widget from the registry (and its parent's descendants array, if applicable), but is not removing the widget's dom nodes from the dom.

I'm approaching this under the assumption that widgets inheriting from dijit/_WidgetBase can be removed from the registry and purged from the dom by calling the widget.destroy() method... if that's not the case -- you can correct me right here :)

I've had this issue for some time, and have been hacking it ... would like to know what I'm doing wrong.

Simple example --

widget template

<div data-dojo-attach-point='domNode'>
  <div data-dojo-attach-point='left'></div>
  <div data-dojo-attach-point='center'>${cName}</div>
  <div data-dojo-attach-point='right'></div>
</div>

widget code

define([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
  "dijit/_TemplatedMixin",
  "dojo/text!./templates/dCard.html"
  ],
  function (declare, _WidgetBase, _TemplatedMixin, template){
    return declare([_WidgetBase, _TemplatedMixin],{
      templateString:template,
      postCreate:function(){
        var domNode = this.domNode;
        this.inherited(arguments);
      },
    });
  }
);

let's assume that there's a dojox/mobile/ContentPane in the dom, var'd out as rBox

>> window.rBox = new ContentPane({id:'rBox'}).placeAt(document.body);

iterate over an array of data and create widgets

>> var data = {"records":[{"cname":"Gary Kunz"},{"cname":"Bigham,
Michael},{"cname":"Westlund, Michael"}]};

>> data.records.forEach(function(x){
      rBox.addChild(new simpleWidget({cName:x.cname}));
    });

Still with me? Now - I can call rBox.destroyDescendants(); ....
rBox.getChildren().forEach(function(child){child.destroy();}); .... I can get explicit references to the widget and call destroy on it directly...

I get the same result. The widget(s) are removed from the registry (or the parent's child array), but the widget's dom representation is staring me in the face....

I have got to be missing something... anybody have any ideas?

Thanks all. Much appreciated.

- derek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.dojotoolkit.org/pipermail/dojo-interest/attachments/20160908/e4760435/attachment.html

------------------------------

________________
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/
Reference Guide: http://dojotoolkit.org/reference-guide
API Documentation: http://dojotoolkit.org/api

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



End of Dojo-interest Digest, Vol 141, Issue 3
*********************************************
--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest


--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest
Reply | Threaded
Open this post in threaded view
|

Re: calling destroy on templated widget not modifying dom

derekpdx
In reply to this post by bradmapin
You're a wizard, Brad. 

Removing the explicit domNode attach point solved everything.

Thank you very much.

Cheers.

- derek

On Fri, Sep 9, 2016 at 10:57 AM, Brad Maupin <[hidden email]> wrote:
The widget not destroying properly would indicate that widget.domNode is undefined or so to some other node. I doubt this is it, but I would try removing the data-dojo-attach-point="domNode" as that is not necessary.

On Fri, Sep 9, 2016 at 10:24 AM, derek miller <[hidden email]> wrote:
Currently 1.10, though I've had this issue / misunderstanding with 1.9 as well.

I've since mixed in _Contained to the custom widget... the custom widget contains no children... calling widget.destroy() gets the same results.

Calling widget.destroyRecursive() would destroy both the parent and its children, no? That's not what I'm after, regrettably.


thanks.

derek


On Fri, Sep 9, 2016 at 10:15 AM, Brad Maupin <[hidden email]> wrote:
What version of dojo are you using? Last when I was working with dijit (1.9), calling widget.destroyRecursive() was the proper way to destroy a container widget. Oh yeah, also mixin dijit._Container into all widgets that contain other widgets.

On Fri, Sep 9, 2016 at 10:10 AM, Miller, Derek <[hidden email]> wrote:

Update:

Perhaps I misunderstood _widgetBase.destroy(); ?

If the custom widget is contained within a parent widget via parent.addChild(customWidget) ---> then calling customWidget.destroy() unregisters it from the parent (leaving its dom representation) --> and calling parent.removeChild(customWidget) removes the custom widget dom representation from the dom.

Is that the expected behavior? To chain those calls? Fine if so.... interested to hear.

Side Note: if this is the case.... how would one destroy and purge a custom widget that is not contained within a parent?

Thanks again.

- derek

-------------------------------------------------------------------------------------------------
Message: 2
Date: Thu, 8 Sep 2016 19:04:44 -0700
From: derek miller <[hidden email]>
Subject: [Dojo-interest] calling destroy on templated widget not
        modifying       dom
To: [hidden email]
Message-ID:
        <CAHyPT9sRxaLNZ0V1UjbPMokDYBJzJG=[hidden email]>
Content-Type: text/plain; charset="utf-8"

I'm having issues destroying custom, templated widgets... calling
widget.destroy() is removing the widget from the registry (and its parent's descendants array, if applicable), but is not removing the widget's dom nodes from the dom.

I'm approaching this under the assumption that widgets inheriting from dijit/_WidgetBase can be removed from the registry and purged from the dom by calling the widget.destroy() method... if that's not the case -- you can correct me right here :)

I've had this issue for some time, and have been hacking it ... would like to know what I'm doing wrong.

Simple example --

widget template

<div data-dojo-attach-point='domNode'>
  <div data-dojo-attach-point='left'></div>
  <div data-dojo-attach-point='center'>${cName}</div>
  <div data-dojo-attach-point='right'></div>
</div>

widget code

define([
  "dojo/_base/declare",
  "dijit/_WidgetBase",
  "dijit/_TemplatedMixin",
  "dojo/text!./templates/dCard.html"
  ],
  function (declare, _WidgetBase, _TemplatedMixin, template){
    return declare([_WidgetBase, _TemplatedMixin],{
      templateString:template,
      postCreate:function(){
        var domNode = this.domNode;
        this.inherited(arguments);
      },
    });
  }
);

let's assume that there's a dojox/mobile/ContentPane in the dom, var'd out as rBox

>> window.rBox = new ContentPane({id:'rBox'}).placeAt(document.body);

iterate over an array of data and create widgets

>> var data = {"records":[{"cname":"Gary Kunz"},{"cname":"Bigham,
Michael},{"cname":"Westlund, Michael"}]};

>> data.records.forEach(function(x){
      rBox.addChild(new simpleWidget({cName:x.cname}));
    });

Still with me? Now - I can call rBox.destroyDescendants(); ....
rBox.getChildren().forEach(function(child){child.destroy();}); .... I can get explicit references to the widget and call destroy on it directly...

I get the same result. The widget(s) are removed from the registry (or the parent's child array), but the widget's dom representation is staring me in the face....

I have got to be missing something... anybody have any ideas?

Thanks all. Much appreciated.

- derek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.dojotoolkit.org/pipermail/dojo-interest/attachments/20160908/e4760435/attachment.html

------------------------------

________________
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/
Reference Guide: http://dojotoolkit.org/reference-guide
API Documentation: http://dojotoolkit.org/api

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



End of Dojo-interest Digest, Vol 141, Issue 3
*********************************************
--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest


--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest



--
Dojo Toolkit: http://dojotoolkit.org/
Tutorials: http://dojotoolkit.org/documentation/

[hidden email]
To unsubscribe, visit: http://mail.dojotoolkit.org/mailman/listinfo/dojo-interest