花式树。如何限制拖动的可能性?
Fancytree. How to limit dragging possibilities?
我打算将 fancytree 用于 creating/editing 菜单类别的商品。我在我的数据库中使用嵌套集原则 (MySQL)。如果按照这个原则的话,我需要通过以下方式来限制拖动。我希望树叶只能放置在只有树叶的层级。换句话说,我希望没有 children 的元素只能放置到具有相同元素但没有 children 元素的水平。如果目标级别至少有一个具有 children 的元素,我想禁止这种拖动。我该怎么做?
简而言之:拖放是否合格由传递给 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
对象以避免一直重新计算。
这里有一些印第安纳琼斯的工作:
我有类似的问题(限制 children 仅限于文件夹,没有 children 用于文件)并且在阅读了一些文档之后,得到了答案:
仅限 children 到文件夹:
dragEnter: function(node, data) {
if(node.isFolder()){
return true;
}
return 'before';
},
将 children 限制为最大级别 2:// 0 - 根,1 - 第一个可见
dragEnter: function(node, data) {
if(node.getLevel() < 2){
return true;
}
return 'before';
},
我打算将 fancytree 用于 creating/editing 菜单类别的商品。我在我的数据库中使用嵌套集原则 (MySQL)。如果按照这个原则的话,我需要通过以下方式来限制拖动。我希望树叶只能放置在只有树叶的层级。换句话说,我希望没有 children 的元素只能放置到具有相同元素但没有 children 元素的水平。如果目标级别至少有一个具有 children 的元素,我想禁止这种拖动。我该怎么做?
简而言之:拖放是否合格由传递给 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
对象以避免一直重新计算。
这里有一些印第安纳琼斯的工作:
我有类似的问题(限制 children 仅限于文件夹,没有 children 用于文件)并且在阅读了一些文档之后,得到了答案:
仅限 children 到文件夹:
dragEnter: function(node, data) {
if(node.isFolder()){
return true;
}
return 'before';
},
将 children 限制为最大级别 2:// 0 - 根,1 - 第一个可见
dragEnter: function(node, data) {
if(node.getLevel() < 2){
return true;
}
return 'before';
},