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