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 をツリーのルート (および他のいくつかの場所) にドロップできます。条件も満たしています。

4

1 に答える 1

1

ここで質問と回答が見つかりませんでしたが、1時間後に自分で解決しました。

答えは、ツリーのルート (または 2 番目のツリー) にドラッグすると、 isAllowed: function (item, parent) は、ルートであるべきだと思う ol または li ではなく、parent を null として設定するということです! したがって、チェックを追加するだけでこの問題を解決できます。

解決策は次のとおりです。

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

            ...

さらに、connectWith と isAllowed は、nestedSortable を使い始めたときに 1 日かかりました。うまくいけば、これはそれらの使用方法のサンプルにもなります。

于 2013-10-20T02:21:17.417 に答える