Javascript 幻想树。如何限制拖动的可能性?

Javascript 幻想树。如何限制拖动的可能性?,javascript,jquery,fancytree,Javascript,Jquery,Fancytree,我将使用fancytree创建/编辑商品的菜单类别。我在DB(MySQL)中使用嵌套集原则。如果用这个原则的话来说,我需要用下面的方法来限制拖动。我希望叶子只能放在只有叶子的地方。换句话说,我希望没有子元素的元素只能放置到有相同元素的级别,没有子元素的元素。若目标层至少有一个元素有子元素,我想禁止这样的拖动。我如何才能做到这一点?简而言之:拖放,合格性由传递到dnd扩展启动选项的dragStart和dragEnter函数决定: DnD扩展单用代码汇总;以下省略了一些细节: dragStart:

我将使用fancytree创建/编辑商品的菜单类别。我在DB(MySQL)中使用嵌套集原则。如果用这个原则的话来说,我需要用下面的方法来限制拖动。我希望叶子只能放在只有叶子的地方。换句话说,我希望没有子元素的元素只能放置到有相同元素的级别,没有子元素的元素。若目标层至少有一个元素有子元素,我想禁止这样的拖动。我如何才能做到这一点?

简而言之:拖放,合格性由传递到
dnd
扩展启动选项的
dragStart
dragEnter
函数决定:

DnD扩展单用代码汇总;以下省略了一些细节:

dragStart: function (node, data) {
  // Return false to cancel dragging of node.
  // if( node.isFolder() ) { return false; }

  return true;
},

dragEnter: function (node, data) {
  // Return false to disallow dropping on node.
  // E.g., Prevent dropping a parent below another parent (only sort
  // nodes under the same parent):
  // if (node.parent !== data.otherNode.parent) {
  //   return false;
  // }

  // Don't allow dropping *over* a node (would create a child). Just
  // allow changing the order:
  // return ["before", "after"];

  // Accept everything:
  return true;
},

我不能完全理解您的业务逻辑,但您似乎只需要检查当前和目标节点子属性的一些组合。我可以考虑把这些数据放进< FancytreeNode > <代码>对象中以避免重新计算。

< P >印第安娜的一些琼斯工作在这里:

我有一个类似的问题(将儿童仅限于文件夹,不允许儿童用于文件),在阅读了一些文档后,我得到了以下答案:

仅将子文件夹限制为:

dragEnter: function(node, data) {
            if(node.isFolder()){
             return true;
            }
             return 'before';
            },
将儿童的最大级别限制为2://0-根,1-第一个可见

dragEnter: function(node, data) {
            if(node.getLevel() < 2){
             return true;
            }
             return 'before';
            },
dragEnter:函数(节点、数据){
if(node.getLevel()<2){
返回true;
}
返回“之前”;
},