我想知道是否有方法在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