Fancytree。如何限制拖动的可能性?

时间:2015-09-15 19:21:23

标签: javascript jquery fancytree

我将使用fancytree来创建/编辑菜单类别的商品。我在我的数据库(MySQL)中使用嵌套集原则。如果用这个原则的话来说,我需要通过以下方式限制拖动。我想叶子只能放在只留下叶子的水平。换句话说,我希望没有子元素的元素只能放在有相同元素的级别,没有子元素。如果目标级别至少有一个包含子元素的元素,我想禁止这样的拖动。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

Nutshell:拖放,资格取决于传递到dragStart扩展程序启动选项的dragEnterdnd函数:

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对象中,以避免一直重新计算。

答案 1 :(得分:1)

一些印第安纳琼斯的工作在这里:

我有一个类似的问题(将子级仅限制在文件夹中,没有子级用于文件),在阅读了一些文档后,得到了以下答案:

仅将儿童的文件夹限制为:

dragEnter: function(node, data) {
            if(node.isFolder()){
             return true;
            }
             return 'before';
            },

将孩子的活动限制为最大级别2:// 0-root,1-1-可见

dragEnter: function(node, data) {
            if(node.getLevel() < 2){
             return true;
            }
             return 'before';
            },