關於 Ext Js DD(Drag & Drop) TreeView to Grid

關於 Ext Js DD(Drag & Drop) TreeView to Grid

最近寫到要將資料從Tree View中拖拉到Grid中,並呈現某些效果,

網路上已經有很多範例教學甚至分析ExtJS的DD

5 Steps to Understanding Drag and Drop with Ext JS

我將我自己的經驗整理筆記起來,

DD為 Drag & Drop的縮寫,

簡單的說,你要知道你的拖拉區域,

從哪取,放到哪。

Drag :

取的部分可以用DragSource & DragZone去實現,

但我偷懶一點利用ViewConfig&加上plugin去建立Drag,

將以下code加入View中 :


        plugins: {
            ptype: 'gridviewdragdrop',
            ddGroup: 't2div',
            enableDrop: false
        },
    },

這樣就可以實現Drag的動作。

Drop :

但是沒有給他一個Drop的地區,不管丟到哪他都會顯示不可丟。

所以我們要添加 Drop 地區的設定,

我主要是在欲Drop的View中,加入一個afterRender function ,

去處理Drop後的動作,其中主要是要去new DragTarget,

並注意Drag & Drop的ddgroup要設定成同一group,

然後利用notifyDrop 去處理之後的動作


    afterRender:function() {
        Ext.Panel.prototype.afterRender.apply(this, arguments);
        this.dropTarget = this.body;
        var target = this;
        
        var dd = new Ext.dd.DropTarget(this.dropTarget, {
            // must be same as for tree
            ddGroup:'t2div',
            // what to do when user drops a node here
            notifyDrop:function(dd, e, node) {
                              
                var tabInfo = {
                    closable: true,
                    html: '<image id="' + node.records[0].data.ID + '" src="' + node.records[0].data.Url + '" />',
                    iconCls: node.records[0].data.iconCls,
                    title: node.records[0].data.text,
                    itemId: node.records[0].data.id
                };

                target.add(tabInfo);

                return true;

            } 
        });
    }

以上應該是可以完成將Tree Node Drop到Grid,並show出img。

 

如有錯誤,敬請糾正,感謝。