【发布时间】:2019-12-20 10:22:51
【问题描述】:
我将使用 fancytree 来创建/编辑商品的菜单类别。我在我的数据库(MySQL)中使用嵌套集原则。如果用这个原理的话,我需要通过以下方式来限制拖动。我希望叶子只能放置到只有叶子的级别。换句话说,我希望没有子元素的元素只能放置在有相同元素且没有子元素的地方。如果目标级别至少有一个有子元素的元素,我想禁止这种拖动。我该怎么做?
【问题讨论】:
标签: javascript jquery fancytree
我将使用 fancytree 来创建/编辑商品的菜单类别。我在我的数据库(MySQL)中使用嵌套集原则。如果用这个原理的话,我需要通过以下方式来限制拖动。我希望叶子只能放置到只有叶子的级别。换句话说,我希望没有子元素的元素只能放置在有相同元素且没有子元素的地方。如果目标级别至少有一个有子元素的元素,我想禁止这种拖动。我该怎么做?
【问题讨论】:
标签: javascript jquery fancytree
简而言之:拖放,资格由传递给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 对象以避免一直重新计算。
【讨论】:
这里有一些印第安纳琼斯的工作:
我有类似的问题(仅限儿童的文件夹,没有儿童的文件),在阅读了一些文档后,得到了答案:
仅限儿童使用文件夹:
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';
},
【讨论】: