我正在使用带有isAllowed condiction的nestedSortable:
$('ol.nestedSortable').nestedSortable({
forcePlaceholderSize: true,
handle: 'div',
helper: 'clone',
connectWith: 'ol.item-tree', //!
items: 'li',
opacity: .6,
placeholder: 'placeholder',
revert: 250,
tabSize: 25,
tolerance: 'pointer',
toleranceElement: '> div',
maxLevels: 0,
isTree: true,
expandOnHover: 700,
startCollapsed: true,
isAllowed: function (item, parent) {
if (!parent.attr('accepttypes')) {
return true;
}
if (parent.attr('accepttypes') == "none") {
return false;
}
if (parent.attr('accepttypes').indexOf(item.attr('type')) >= 0) {
return true;
}
return false;
},
....
但isAllowed仅适用于单个树。当被拖入另一个树(由connectWith定义时,即使条件不满足,也可以将li放到树的根(和其他一些地方)。然后我意识到可以将li拖到它自己的树的根上而不用也符合条件。
答案 0 :(得分:1)
我在这里找不到问题和答案,一小时后,我自己解决了。
答案是,当拖动到树的根(或第二棵树)时,isAllowed:function(item,parent)会将parent设置为null,而不是你认为应该是root的ol或li !如此简单地添加一个检查可以解决这个问题。
以下是解决方案:
isAllowed: function (item, parent) {
if (parent == null) {
return false; //Or do something else.
}
...
此外,当我们开始使用nestedSortable时,connectWith和isAllowed花了我一天的时间,希望这也可以作为如何使用它们的示例。