我被困了,我希望有人可以帮我解决这个问题。我有三种节点类型,我正在填充JStree。
尝试将一个节点拖放到另一个节点时,我需要考虑一些规则。
问题:JSTree忽略我正在返回的布尔值,并允许所有元素的DND。通常返回“false”会设置红色X并且也不允许丢弃,但事实并非如此。我已将函数checkNodeCB()的返回写入控制台,我的真/假逻辑似乎是合理的。请参阅下面的代码:
core: {
check_callback: function(e,node,parent,position,more){
function checkNodeCB(oNode,tNode){
if(tNode.type === "folder" && oNode.type !== "job"){
//console.log("I want to place a "+oNode.type+" inside a folder");
return true;
}
if(tNode.type === "project" && oNode.type === "job"){
//console.log("I want to place a job under a project");
return true;
}
return false;
};
if((e === 'copy_node' || e === 'move_node') && more.dnd){
if (oldNode !== more.ref.id){
oldNode = more.ref.id; //Set the oldNode to the current ID so it no longer executes
//console.log(checkNodeCB(node.original,more.ref.original));
return checkNodeCB(node.original,more.ref.original);
}
}
return true;
},
worker: true
},
dnd:{
check_while_dragging:true
},
答案 0 :(得分:0)
就像每一个启蒙时刻一样,我走开去照顾大自然,并意识到我做错了什么。我试图通过仅在我的鼠标移动到另一个节点上时执行checkNodeCB()函数来使我的代码更有效,并且忽略了考虑到在函数外部仍然将返回设置为true。代码并不完美,但这就是我最终的结果。
check_callback: function(e,node,parent,position,more){
function checkNodeCB(oNode,tNode){
if(tNode.type === "folder" && oNode.type !== "job"){
outPut = true;
}
if(tNode.type === "project" && oNode.type === "job"){
outPut = true;
}else{
outPut = false;
}
};
if((e === 'copy_node' || e === 'move_node') && more.dnd){
if (oldNode !== more.ref.id){
oldNode = more.ref.id; //Set the oldNode to the current ID so it no longer executes
checkNodeCB(node.original,more.ref.original);
}
return outPut; //Use the output variable so the state persists when moving the mouse over the current "hovered" node
}
return true;
},