2017-05-02 14 views
0

私はExtJS 6.0.1を使用しています。グリッドの項目をグリッドからツリー上にドラッグして、いくつかのカテゴリ値をグリッドレコードに変更できます。ExtJS Drag&Dropはドロップで "TypeError:path is undefined"を返します

しかし、ドロップイベントで私はこのエラーを受け取ります: "TypeError: path is undefined"。エラーは、クラスのファーストラインからの関数ensureVisibleによって返されます。

 var foldersStore = Ext.create("Ext.data.TreeStore",{ 
       storeId: 'foldersTreeStore', 
       proxy: { 
        type: 'ajax', 
        url: 'categories/tree.json' 
       }, 
       autoLoad: true 
      }); 

      var foldersTree = Ext.create("Ext.tree.Panel",{ 
       title: 'Categories', 
       hideHeaders: true, 
       renderTo: 'folders-tree', 
       rootVisible: false, 
       allowDeselect: true, 
       store: foldersStore, 
       droppedRecords: undefined, 
       viewConfig: { 
        plugins: { 
         ptype: 'treeviewdragdrop', 
         dragText: 'Drag and drop to reorganize', 
         dropGroup: 'bkmDDGroup', 
         appendOnly: true 
        }, 
        listeners: { 
         beforedrop: function(node, data, overModel, dropPos, opts) { 
          this.droppedRecords = data.records; 
          data.records = []; 

          console.log(this.droppedRecords); 
         }, 
         drop: function(node, data, overModel, dropPos, opts) { 
          console.log(arguments); 
         } 
        } 
       } 
      }); 

      var filesStore = Ext.create("Ext.data.Store",{ 
       storeId:'filesTableStore', 
       fields:[ 
        {name: 'eid', type:'string'}, 
        {name: 'fileName', type:'string'}, 
        {name: 'createdAt', type:'string'}, 
        {name: 'mimeType', type:'string'}, 
        {name: 'version', type:'string'}, 
        {name: 'size', type:'int'}, 
        {name: 'creator', type:'string'}, 
        {name: 'modifier', type:'string'}, 
        {name: 'status', type:'string'}, 
        {name: 'tmpId'} 
       ], 
       proxy: { 
        type: 'ajax', 
        url: 'documents/list.json', 
        reader: { 
         type: 'json', 
         rootProperty: "list" 
        } 
       }, 
       autoLoad: true 
      }); 

      var filesTable = Ext.create("Ext.grid.Panel",{ 
       store: filesStore, 
       title:'Files', 
       selModel: { 
        mode: "MULTI", 
        allowDeselect: true 
       }, 
       columns:[ 
        { 
        text:'File Name', 
        flex:1, 
        dataIndex:'fileName' 
       },{ 
        text:'Created By', 
        flex:1, 
        dataIndex:'creator' 
       },{ 
        text:'Mime Type', 
        width: 150, 
        dataIndex:'mimeType' 
       },{ 
        text:'Size', 
        width: 100, 
        dataIndex:'size' 
       },{ 
        text:'Version', 
        width: 80, 
        dataIndex: 'version' 
       },{ 
        text:'Status', 
        width: 100, 
        dataIndex:'status' 
       },{ 
        text:'Created At', 
        width:150, 
        dataIndex:'createdAt' 
       }], 
       renderTo:'files-table', 
       height:UI.getContentHeight("#files-table"), 
       viewConfig: { 
        plugins: { 
         ptype: 'gridviewdragdrop', 
         dragText: 'Drag and drop to reorganize', 
         dragGroup: 'bkmDDGroup' 
        } 
       } 
      }); 

私の観点から見ると、いくつかの設定を忘れてしまったようですが、まだ何も考えていません。ドロップイベントのconsole.log行が1つでもあっても、エラーは同じままです。

すべての手がかりは非常に高く評価されます。

代わり
data.records = [] 

を使用すると、レコードがデータモデルは、グリッドとは異なりTreePanelにドロップすることを準備する必要があります: おかげで

+0

Link提供は、ここで問題https://fiddle.sencha.com – Makha

+0

でフィドルを喜ば私のバイオリンです:https://fiddle.sencha.com/#fiddle/1v30&view/editor – pictoru

答えて

0

beforedropリスナーでは、あなたが選択したレコードを削除しています。実現

+0

私はあなたの例がExtJS 6で動作しないのではないかと思います。例ではバージョン4を使用しています。はい、レコードを削除します。そうでなければ、グリッドから削除されます。私はそのリストから削除したいだけですが、DB内でそれらのファイル(グリッド要素)のカテゴリ(ツリー要素)を変更する必要があります。私はbeforedropからすべてを削除し、イベントをドロップし、エラーが解決されます。私は覚えています、私はバージョン6.0.1を使用しています。 – pictoru

+0

[コピー](https://docs.sencha.com/extjs/6.0.0/classic/Ext.grid.plugin.DragDrop.html)プロパティを試してください。その後、必要に応じてソースグリッドからレコードを削除することができます。 – Makha

+0

'data.records = []'を削除し、 'gridviewdragdrop'プラグインに' copy:true'プロパティを追加してください – Makha

関連する問題