2

ドラッグドロップ イベントの後に、ノードの新しい親 ID を定義しようとしています。

この関数は、ノードをルート以外のレベルにドラッグすると正常に機能します

dragDrop: function(node, data) {
                /** This function MUST be defined to enable dropping of items on
                 *  the tree.
                 */
                data.otherNode.moveTo(node, data.hitMode);
                // Set Parent ID with id of parent
                data.otherNode.data.parent_id = node.data.id;
            }

ただし、ノードをルートにドラッグすると、別の場所から ID が取得されます (パターンはまだわかりません)。

私は fancytree node.key (親ノードのキーを示します) を監視してきましたが、tree.toDict(true); を使用してツリーを出力すると、ルートの値は常に出力key_2され、決して出力されません。root_1関数。

ノードがルートにドラッグされたかどうかを確認する適切な方法は何ですか?

4

2 に答える 2

4

mar10 が述べたように、非表示のシステム ルート ノードを dragDrop イベントのターゲット ノードとして取得することはありません。したがって、レベル 0 に到達することはありません。

ノードは常に他のノードの「上」、「前」、または「後」にドロップされます。これは で表されnode.hitModeます。

ノードを最初のレベル (ルート レベルと呼んでいるものだと思います) にドロップするのを防ぎたいだけで、"to" フォルダーのみにドロップする場合は、hitMode を次のように制限します。

dragEnter: function(node, data) {
        if(node.folder == false) {
               return false;
        }
        return 'over';
}

dragDrop イベントの最初の (ルート) レベルを確認したい場合は、次のようにします。

dragDrop: function(node, data) {
        if (node.getLevel() == 1 && (data.hitMode == 'after' || data.hitMode == 'before')) {
            console.log('dropped into first level');
        }
}

質問が他のものを対象としている場合は、質問を編集するか、コメントを残してください。

于 2014-10-07T20:24:42.523 に答える
0

これは予想される動作です:

var tree = $(":ui-fancytree").fancytree("getTree");
tree.rootNode.getLevel() // == 0 (invisble system root)
tree.rootNode.getFirstChild().getLevel() // == 1 (visible top level node)

before別のノードを (つまり、そのover子として)ドロップすることができます。(ルートノードは表示されないため、ターゲットとして取得することはありません)。をログnode.titleに記録するnode.hitModeと、node.getLevel()状況が明らかになる可能性があります...

于 2014-10-06T16:50:16.953 に答える