2016-12-12 9 views
0

私は数日間、Sencha GXTを使用していましたが、現在、Drag'n'dropを別のファイルシステムを表す2つのツリー間で動作させようとしています。 これは、複数の異なるフォルダ内の1つのシステムに重複ファイルをコピーすることができますが、そのファイルには同じキーがあるため、トレストアが破損することを意味します。GXTツリーにアイテムが追加されたときにキーを変更

私がこれまで試したどのような

、および結果:

  • 試み:TreeDropHandler/TreeMoveHandlerで物事を行う
  • 結果:ウィジェットが

  • を動かしなっているときに、これらのためのもので判明
  • 試行:TreeDataStoreをオーバーライドしてaddメソッドをオーバーライドします

  • 結果:addメソッドは、ドラッグアンドドロップでも呼び出されません彼は木 - 手動TreeStoreの

  • 試みに物事を追加するために、彼らは唯一そこにいるようだ。ただ、全体TreeStoreのをコピーして、私は

  • 結果する方法を動作するように変更:ツリーはspecfically TreeStoreのクラスを期待しますいくつかの抽象クラスを実装し、ではない何かが、残念ながら、私はこの

  • 試みを行うことはできません。TreeStoreの

  • 結果

    の挿入メソッドをオーバーライド:これらのメソッドはTreeStoreの内のプライベートサブクラスの内側にあり、だから私オリジナルを拡張TreeStoreのクラスの修正版を作成し、ちょうどすべて

  • の検索結果を隠す:コンパイラは私の私が対処するための変数の@Overrideのインフロントを必要と教えてくれます直接

  • 試みそれらにアクセスすることはできません(x100)

私はこの時点で他に何かしようとしていることに固執しています。 誰かがアドバイスや例があれば、私は最も感謝しています。

答えて

0

私は最終的に、2つのツリー間で物をドラッグアンドドロップするときに(特定の使用例のために)動作するものをハッキングしました。特定のキーインスタンスは重要ではなく、キー自身のパス - 主な部分は、addSubTreeの代わりにinsertを使用してツリーコンポーネントを個別に追加するためにappendModelを変更しているだけなので、実際にインスタンスを作成できるデータ型がありました。

誰かがもっと良い方法を見つけることができれば、私はそれを見たいと思います。

public class MyTreeDropTarget extends TreeDropTarget<FileSystemKey> { 
    public MyTreeDropTarget(Tree<FileSystemKey, ?> tree) { 
     super(tree); 
    } 

    private void InsertClone(FileSystemKey parent, 
      TreeStore.TreeNode<FileSystemKey> node, int index) { 
     FileSystemKey clone; 
     if (parent == null) { //root of the tree 
      clone = new FileSystemKey(node.getData()); 
      clone.SetKey("/", null, "/" + clone.key2); 
      getWidget().getStore().insert(index, clone); 
     } else { //a child element 
      clone = new FileSystemKey(node.getData()); 
      clone.SetKey(parent.key1 + parent.key2 + "/", null, parent.key1 
       + parent.key2); 
      getWidget().getStore().insert(parent, index, clone); 
     } 
     //if this node had children, 
     //we then insert the children as children of this node 
     if (node.getChildren().size() > 0) { 
      //TODO: rewrite to preserve order  
      appendModel(clone, node.getChildren(), 0); 
     } 
    } 

    @Override 
    protected void appendModel(FileSystemKey p, List<?> items, int index) { 
     if (items.size() == 0) 
      return; 
     if (items.get(0) instanceof TreeStore.TreeNode) { 
      // @SuppressWarnings("unchecked") 

      List<TreeStore.TreeNode<FileSystemKey>> nodes = (List<TreeStore.TreeNode<FileSystemKey>>) items; 

      // TODO: replace clone with gets 
      for (TreeStore.TreeNode<FileSystemKey> key : nodes) { 
       InsertClone(p, key, index); 
      } 
     } else {// no changes here - maybe change 
       // this if you have non-homogenous key types 
      @SuppressWarnings("unchecked") 
      List<FileSystemKey> models = (List<FileSystemKey>) items; 
      if (p == null) { 
       getWidget().getStore().insert(index, models); 
      } else { 
       getWidget().getStore().insert(p, index, models); 
      } 
     } 
    } 
} 
関連する問題