1

ダイナツリーからデータをドラッグして別のダイナツリーにドロップしようとしています。ドキュメントでは、例は同じツリー内のノードを移動する方法を示しています。ノードを移動して、すべてのオプションを使用して 2 番目の dynaTree に配置することは可能ですか??

最初のツリーには :

    $("#Tree1).dynatree({
 dnd: {
                    onDragStart: function (node) {

                        logMsg("tree.onDragStart(%o)", node);
                        return true;
                    },
});

そして2番目の木:

 $("#Tree2").dynatree({
        dnd :{
        onDrop: function (node, sourceNode, hitMode, ui, draggable) {
                            logMsg("tree.onDrop(%o, %o, %s)", node, sourceNode, hitMode);
                            sourceNode.move(node, hitMode);
    },


        onDragEnter: function (node, sourceNode) {


                                logMsg("tree.onDragEnter(%o, %o)", node, sourceNode);
                                return true;
                            }
}
        });

前もって感謝します

4

3 に答える 3

1

実際、これを行うことができます。各ダイナツリーをdivに配置し、そのdivをドロップ可能にするだけです。DOMは、dynatreeがイベントにアタッチしているものであるため、ドロップ可能からdynatreeノードオブジェクトを解析できます。

ここで実用的なサンプルを見ることができます。

于 2012-11-28T20:31:57.853 に答える
1

私の知る限り、現在 dynatree は異なるツリー間の移動ノードをサポートしていません。ただし、tree1 からノードをコピーして、コピーしたノードを tree2 に追加することはできます。その後、tree1 のノードを削除できます。このアプローチでは、ツリー間でノードを移動する動作を模倣できます。

したがって、sourceNode.move(node, hitMode) を使用する代わりに、これを使用できます。

var copyNode = sourceNode.toDict(true, function (dict) {
    delete dict.key;
});

node.addChild(copyNode);

この助けを願っています。

于 2012-05-09T06:51:28.740 に答える
0

dynatree 1(ドラッグ可能)

$("#tree").dynatree({
dnd: {
                revert: false, // true: slide helper back to source if drop is rejected
                onDragStart: function(node) {

                },
                onDragStop: function(node) {

                }
            },
            cookieId:"dynatree-cb1",
            idPrefix:"dynatree-cb1-"
        });

dynatree 2(ドロップ可能)

$("#tree2").dynatree({
dnd: {

                autoExpandMS: 1000,
                preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
                onDragEnter: function(node, sourceNode) {

                    if(node.data.isFolder){
                      return false;
                    }
                    return true;
                    // return "over";
                  },
                  onDragOver: function(node, sourceNode, hitMode) {


                  },
                  onDrop: function(node, sourceNode, hitMode, ui, draggable) {

                    logMsg("tree.onDrop(%o, %o)", node, sourceNode);
                    var copynode;
                    if(sourceNode) {
                      copynode = sourceNode.toDict(true, function(dict){
                        dict.title = "Copy of " + dict.title;
                        delete dict.key; // Remove key, so a new one will be created
                      });
                    }else{
                      copynode = {title: "This node was dropped here (" + ui.helper + ")."};
                    }
                    if(hitMode == "over"){
                      // Append as child node
                      node.addChild(copynode);
                      // expand the drop target
                      node.expand(true);
                    }else if(hitMode == "before"){
                      // Add before this, i.e. as child of current parent
                      node.parent.addChild(copynode, node);
                    }else if(hitMode == "after"){
                      // Add after this, i.e. as child of current parent
                      node.parent.addChild(copynode, node.getNextSibling());
                    }
                  },
                  onDragLeave: function(node, sourceNode) {
                    /** Always called if onDragEnter was called.
                     */
                    logMsg("tree.onDragLeave(%o, %o)", node, sourceNode);
                  }
                },
            cookieId:"dynatree-cb2",
            idPrefix:"dynatree-cb2-"
        });

動作するこのコードを試してください。私は前に同じことをしました。

于 2014-04-11T05:36:50.570 に答える