我将使用fancytree来创建/编辑菜单类别的商品。我在我的数据库(MySQL)中使用嵌套集原则。如果用这个原则的话来说,我需要通过以下方式限制拖动。我想叶子只能放在只留下叶子的水平。换句话说,我希望没有子元素的元素只能放在有相同元素的级别,没有子元素。如果目标级别至少有一个包含子元素的元素,我想禁止这样的拖动。我怎么能这样做?
答案 0 :(得分:3)
Nutshell:拖放,资格取决于传递到dragStart
扩展程序启动选项的dragEnter
和dnd
函数:
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';
},