JSTree - DND不尊重退货

时间:2015-04-13 20:46:19

标签: javascript jquery jstree

我被困了,我希望有人可以帮我解决这个问题。我有三种节点类型,我正在填充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
  },

1 个答案:

答案 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;
     },