В настоящее время ... (так как я не знал, как реализовать гибрид JS)
Я использовал событие отмены и сравнил координаты мыши с каждым исходным объектом на странице, чтобы определить, в какой объект он должен быть добавлен.
JS на странице сейчас:
var mchandle;
dojo.require("dojo.dnd.Source");
var lastSrc;
function init() {
dojo.subscribe("/dnd/drop", function(source, nodes, iscopy) {
dojo.byId("msg").innerHTML += " drop";
dojo.disconnect(mchandle);
});
dojo.subscribe("/dnd/start", function(source, nodes, iscopy) {
lastSrc = source;
mchandle = dojo.connect(dojo.doc, "onmousemove", "mouseCoords");
dojo.byId("msg").innerHTML = "start";
var px = 0;
var py = 0;
for (var i = 0; i < nodes.length; i++) {
var nPos = dojo._abs(nodes[i]);
px = nPos.x > px ? nPos.x : px;
py = nPos.y > py ? nPos.y : py;
}
dojo.dnd.manager().OFFSET_X = 0 - (source._lastX - px);
dojo.dnd.manager().OFFSET_Y = 0 - (source._lastY - py);
});
dojo.subscribe("/dnd/cancel", function() {
dojo.byId("msg").innerHTML += " cancel";
dojo.query("[dojotype=\"dojo.dnd.Source\"]").forEach(function(node, index, array) {
var elemXY = dojo.coords(node);
if ( //in source box
(elemXY.x <= document.mouse.x && document.mouse.x <= (elemXY.x + elemXY.w)) && (elemXY.y <= document.mouse.y && document.mouse.y <= (elemXY.y + elemXY.h))) {
var s = new dojo.dnd.Source(node, null);
s.insertNodes(true, lastSrc.getSelectedNodes(), null, null);
}
});
dojo.disconnect(mchandle);
lastSrc = null;
});
}
dojo.addOnLoad(init);
function mouseCoords(ev) {
var px, py;
ev = ev || window.event;
if (ev.pageX || ev.pageY) {
px = ev.pageX;
py = ev.pageY;
} else {
px = ev.clientX + dojo.body().scrollLeft - dojo.body().clientLeft;
py = ev.clientY + dojo.body().scrollTop - dojo.body().clientTop;
}
document.mouse = {
"x": px,
"y": py
};
}
Ошибка все еще происходит.
Тащу к цели (все хорошо.)
я перетаскиваю из цели, и дублирующий аватар застревает на экране.
firebug сообщает об ошибке.
_5.getItem(_6[i].id) is undefined
} catch (e) {\r\n dojo.js (line 203)
Не могли бы вы предложить какую-нибудь помощь?