そろそろ、会社の社内向けページに使っているDojo Toolkitの0.4から1.2への移行が終わりつつあります。めんどくさがって0.4のまま使い続けてきたのですが、こうやってみるとわりとスムーズだったかなぁ。と思います。英語ですが、ドキュメント類も充実していますし。ソースを参照できるというのも大きいです。
dojo.dnd.Moveable
dojo.require("dojo.dnd.Moveable");
が必要。バージョン0.4のころはdojo.dnd.HtmlDragMoveSourceで要素をドラッグ&ドロップが可能になっていましたが、0.9からはdojo.dnd.Moveableになりました。
new dojo.dnd.Moveable(dojo.byId('objId'));
にて、objIdと名付けられた要素をドラッグ&ドロップが可能になります。
この時、ドラッグ前、ドラッグ後になにか動作したい場合、0.4のときはこちらとこちらのページを参考にdojo.declareを使ってdojo.dnd.HtmlDragMoveSourceのクラスを拡張していました。例えばこんな具合です。
dojo.declare("my_dnd", dojo.dnd.HtmlDragMoveSource, { onDragStart: function(e) { kaishi(); return dojo.dnd.HtmlDragMoveSource.prototype.onDragStart.apply(this, arguments); }, onDragEnd: function(e) { syuryo(); return dojo.dnd.HtmlDragMoveSource.prototype.onDragEnd.apply(this, arguments); } }); new my_dnd(dojo.byId('objId'));
1.2では以下のようにして同様にdojo.dnd.Moveableを拡張できました。関数名が多少変わっている他は、そのまま使えそうです。
dojo.declare("my_dnd", dojo.dnd.Moveable, { onMoveStart: function(e) { kaishi(); return dojo.dnd.Moveable.prototype.onMoveStart.apply(this, arguments); }, onMoveStop: function(e) { syuryo(); return dojo.dnd.Moveable.prototype.onMoveStop.apply(this, arguments); } }); new my_dnd(dojo.byId('objId'));