2017-05-31 12 views
1

私は数日間、PrimeNgのTreeモジュールを使って作業していました。しかし、私は依然として私のカスタムcopyTo関数のオブジェクト参照に問題があります。コールバックがポスト操作と呼ばれるためです。角4 PrimeNg Treeドラッグアンドドロップでコピー

ドラッグ&ドロップハンドラーを中断するためのエレガントな方法を探しています。データを詳細にコピーしてより細かい制御が可能です。プラグインの機能をオーバーライドできるようにクラスを拡張する必要があるように感じる必要があるように感じますが、アップグレードするときにプラグインの機能が低下するかどうかはわかりません。

アドバイスや「おすすめ」の提案は大変ありがとうございます。

以下のコードは、既知のインデックスを持つ要素を取り出し、それをドラッグしたツリーに再度挿入し、あるツリーから別のツリーにコピーします。ただし、これは既知の索引でのみ機能し、ネストされたノードの深度を変更することはできません。我々はただによるオリジナルのTreeNodeオブジェクトの参照を含むTreeNode.parent.childrenアレイに循環参照を扱うことができ、適切な深いコピーを必要なことがわかった別の開発者の作業が終了した後

copyToTree: any = []; // tree obj cache 
    staticTree: any = []; // tree obj cache 

    // Fires when node is dropped on copyToTree 
    dropOnCopyTo(event: any) { 
     let dragged: any = event.dragNode; 

     if(dragged.field_name == null) { // dragged from staticTree 
      // re-add copy to correct position in staticTree 
      let copy: any = this.deepCopy(dragged); 
      this.staticTree.children.splice(copy.index, 0, copy); 
      // Update field_name of dragged in copyToTree 
      dragged.field_name = 'new_' + Date.now(); 
     } 
    } 
+0

これまでに試したことのコードを投稿できますか? – Cody

+0

現在のコピー機能で更新されましたが、前述のように、非静的ツリーノードコピーはサポートされていません – navybofus

答えて

0

public deepCopy(oldObj: any) { 
    // Using jquery for its extensive error checking 
    return $.extend(true, {}, oldObj); 
} 

これにより、オブジェクト参照が結び付けられていない状態で、ツリーノードからツリーノードにスプライスされることが可能になりました。

関連する問題