Ext.require([ 'Ext.tree.*', 'Ext.data.*', 'Ext.layout.container.HBox', 'Ext.window.MessageBox' ]); Ext.define('Item', { extend: 'Ext.data.Model', fields: ['text', 'canDropOnFirst', 'canDropOnSecond'] }) Ext.onReady(function() { var store1 = new Ext.data.TreeStore({ model: 'Item', root: { text: 'Root 1', expanded: true, children: [{ text: 'Child 1', canDropOnFirst: true, canDropOnSecond: true, leaf: true }, { text: 'Child 2', canDropOnFirst: true, canDropOnSecond: false, leaf: true }, { text: 'Child 3', canDropOnFirst: false, canDropOnSecond: true, leaf: true }, { text: 'Child 4', canDropOnFirst: false, canDropOnSecond: false, leaf: true }] } }); var store2 = new Ext.data.TreeStore({ model: 'Item', root: { text: 'Root 2', expanded: true, children: [{ text: 'Folder 1', children: [], expanded: true }, { text: 'Folder 2', children: [], expanded: true }] } }); new Ext.panel.Panel({ renderTo: 'tree-div', width: 300, height: 200, layout: { type: 'hbox', align: 'stretch' }, defaultType: 'treepanel', defaults: { rootVisible: false, flex: 1 }, items: [{ title: 'Source', store: store1, viewConfig: { plugins: { ptype: 'treeviewdragdrop', enableDrag: true, enableDrop: false } } }, { title: 'Destination', store: store2, viewConfig: { plugins: { ptype: 'treeviewdragdrop', enableDrag: false, enableDrop: true, appendOnly: true }, listeners: { nodedragover: function(targetNode, position, dragData){ var rec = dragData.records[0], isFirst = targetNode.isFirst(), canDropFirst = rec.get('canDropOnFirst'), canDropSecond = rec.get('canDropOnSecond'); return isFirst ? canDropFirst : canDropSecond; } } } }] }); });