0

我正在使用带有 isAllowed 条件的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拖到它自己的树根也符合条件。

4

1 回答 1

1

我在这里找不到任何问题和答案,然后一个小时后,我自己解决了。

答案是,当拖到一棵树(或第二棵树)的根部时,isAllowed: function (item, parent) 会将 parent 设置为 null,而不是您认为应该是根的 ol 或 li!所以简单地添加一个检查可以解决这个问题。

这是解决方案:

        isAllowed: function (item, parent) {
            if (parent == null) {
                return false; //Or do something else.
            }

            ...

此外,当我们开始使用 nestedSortable 时,connectWith 和 isAllowed 花了我一天的时间,希望这也可以作为如何使用它们的示例。

于 2013-10-20T02:21:17.417 回答