我想知道是否有方法在dojo Dnd中以编程方式移动节点?原因是我想恢复对Web服务调用触发数据库失败保存时拖放的更改。这是我到目前为止。Dojo DnD以编程方式移动节点
在我的代码中,节点Id似乎无法被dojo.dnd.Container.DelItem识别。我不能只在目标上使用选定的项目,因为这是一个异步的web服务函数回调。所以当这个被调用时,用户可能正在选择容器上的另一个节点。
function OnMoveWSComplete(strResult) {
var resultObj = eval('(' + strResult + ')');
var sourceContainer = eval('(' + objResult.sourceContainerId + ')');
var targetContainer = eval('(' + objResult.targetContainerId + ')');
var targetNodes = targetContainer.getAllNodes();
for (var iNode = 0; iNode < targetNodes.length; iNode++) {
var currId = getLastIdFromStr(targetNodes[iNode].id);
if (currId == resultObj.Id) {
var targetN = targetNodes[iNode];
var Name = targetNodes[iNode].childNodes[0].nodeValue;
targetContainer.delItem(targetNodes[iNode].id);
var origData = { Id: resultObj.Id, Name: Name };
sourceContainer.insertNodes(true, origData);
break;
}
}
}
编辑:解决方案(感谢尤金Lazutkin)[2009/11/30]:
/**
* Move one node from one container to the other
*/
function moveNode(nodeId, sourceContainer, targetContainer) {
var node = dojo.byId(nodeId);
// Save the data
var saveData = sourceContainer.map[nodeId].data;
// Do the move
sourceContainer.parent.removeChild(node);
targetContainer.parent.appendChild(node);
// Sync the DOM object → map
sourceContainer.sync();
targetContainer.sync();
// Restore data for recreation of data
targetContainer.map[nodeId].data = saveData;
}
你怎么祈求的OnMoveWSComplete免打扰完成后?我创建了一个适用于/ dnd/drop的函数,但是当它被调用时,DnD还没有创建,所以更改的反向失败。你能给我一个调用的例子吗? 谢谢。 何塞 – 2010-05-19 13:36:14
何塞,当我承认我刚刚使用连接的Dnd drop事件。它适用于我。 dojo.connect(containerId,'onDrop',onDropSave); – Nap 2010-05-20 06:39:26