第一主目的完了

 そろそろ、会社の社内向けページに使っているDojo Toolkitの0.4から1.2への移行が終わりつつあります。めんどくさがって0.4のまま使い続けてきたのですが、こうやってみるとわりとスムーズだったかなぁ。と思います。英語ですが、ドキュメント類も充実していますし。ソースを参照できるというのも大きいです。

dojo.dnd.Moveable

dojo.dnd.Moveable APIのページ

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'));