0
我試圖使用jsTree基於父子關係創建2棵樹。要做到這一點,我使用下面的腳本:jsTree確定樹之間的移動和更改複製節點ID
$(function() {
loadTree($('#jstree_indexed_container'), document.getElementById('hiddenFieldIndexedData').value);
loadTree($('#jstree_nonindexed_container'), document.getElementById('hiddenFieldNonIndexedData').value);
});
function loadTree(jsTreeContainer, stringData) {
jsTreeContainer.jstree({
"core": {
"animation": 0,
"check_callback": true,
"themes": { "stripes": true },
'data': JSON.parse(stringData)
},
"plugins": ["contextmenu", "dnd", "search", "wholerow", "unique"]
});
jsTreeContainer.on("move_node.jstree", function (e, data) {
notifyServerOfChange(data, false);
});
jsTreeContainer.on("copy_node.jstree", function (e, data) {
notifyServerOfChange(data, true);
});
}
function notifyServerOfChange(data, isCopy) {
var oldParent = getNodeById(data.old_instance, data.old_parent);
var newParent = getNodeById(data.new_instance, data.parent);
alert(sprintf("%s node %s from %s to %s. It now has ID: %s", (isCopy ? "Copied" : "Moved"), (data.original != null ? data.original.id : data.node.id), getNodeTitle(oldParent), getNodeTitle(newParent), data.node.id));
}
function getNodeById(jsTreeContainer, id) {
return jsTreeContainer.element.find("[id='" + id + "']");
}
function getNodeTitle(node) {
return node.find('a').first().text();
}
然而,在移動兩兩棵樹之間的節點時,在「copy_node.jstree」事件總是被調用,即使我移動節點。如果我在同一棵樹中移動節點,我會得到正確的「move_node.jstree」事件。
問題1:有沒有一種方法可以正確確定節點是否在2棵樹之間移動而不是被複制?
問題2:我的節點ID是根據父子關係計算出來的,所以在複製/移動節點之後,我重新計算了這個關係,我想用它來替換節點以前的ID。如果我嘗試修改notifyServerOfChange方法中的data.node.id,則以後不能再選擇該節點。
謝謝
通過在像這樣的方法notifyServerOfChange使用data.instance.set_id解決問題2:如果(data.original)data.instance.set_id(data.node,data.original.id +「 _1" ); –