在ExtJS TreeGrid中拖放

时间:2013-12-10 07:56:50

标签: extjs extjs4

我想在ExtJS TreeGrid中实现拖放节点。我可以填充TreeGrid,但不知道如何处理拖放。这是我的ExtJS代码填充TreeGrid:

Ext.require([
    'Ext.data.*',
    'Ext.grid.*',
    'Ext.tree.*'
]);

Ext.onReady(function () {
    Ext.define('Task', {
        extend: 'Ext.data.Model',
        fields: [
            { name: 'task', type: 'string' },
            { name: 'assignedto', type: 'string' }
        ]
    });

    var store = Ext.create('Ext.data.TreeStore', {
        model: 'Task',
        proxy: {
            type: 'ajax',
            url: 'treegrid.json'
        },
        folderSort: false
    });

    var tree = Ext.create('Ext.tree.Panel', {
        title: 'Core Team Projects',
        width: 500,
        height: 300,
        renderTo: Ext.getBody(),
        collapsible: true,
        useArrows: true,
        rootVisible: false,
        store: store,
        multiSelect: true,
        singleExpand: true,
        columns: [{
            xtype: 'treecolumn',
            text: 'Task',
            flex: 2,
            sortable: true,
            dataIndex: 'task'
        }, {
            text: 'Assigned To',
            flex: 1,
            dataIndex: 'assignedto',
            sortable: true
        }]
    });

以下是示例JSON数据:

{"text":".","children": [
    {
        task:'Task: R&D',       
        assignedto:'Reserved Team',
        iconCls:'task-folder',
        expanded: true,
        children:[{
            task:'Grid',
            duration:1.25,
            assignedto:'Gopal Kanjoliya',
            iconCls:'task-folder',
            children:[{
                task:'Create',
                duration:0.25,
                assignedto:'Gopal Kanjoliya',
                leaf:true,
                iconCls:'task'
            },{
                task:'Read',
                duration:.4,
                assignedto:'Gopal Kanjoliya',
                leaf:true,
                iconCls:'task'
            }]
        }, {
            task:'Tree',
            duration:12,
            assignedto:'Gopal Kanjoliya',
            iconCls:'task-folder',
            expanded: true,
            children:[{
                task:'Add Node',
                duration: 2.75,
                assignedto:'Gopal Kanjoliya',
                iconCls:'task-folder',
                children: [{
                    task: 'Delete',
                    duration: 1.25,
                    assignedto: 'Gopal Kanjoliya',
                    iconCls: 'task',
                    leaf: true
                }]
            },{
                task:'Form',
                duration:2.75,
                assignedto:'Gopal Kanjoliya',
                leaf:true,
                iconCls:'task'
            }]
        }]
    },{
        task:'Task: Implementation',
        duration:2,
        assignedto:'Development Team',
        iconCls:'task-folder',
        children:[{
            task: 'Forms',
            duration: 0.75,
            assignedto: 'Gopal Kanjoliya',
            iconCls: 'task-folder',
            children: [{
                task: 'Grids',
                duration: 0.25,
                assignedto: 'Gopal Kanjoliya',
                iconCls: 'task',
                leaf: true
            }]
        },{
            task: 'Components',
            duration: 3.75,
            assignedto: 'Shyam Dhanotiya',
            iconCls: 'task-folder',
            children: [{
                task: 'Panels',
                duration: 0.25,
                assignedto: 'Shyam Dhanotiya',
                iconCls: 'task',
                leaf: true
            }]
        },{
            task: 'Test',
            duration: 0.5,
            assignedto: 'Snehil Chaturvedi',
            iconCls: 'task-folder',
            children: [{
                task: 'Manual',
                duration: 0.25,
                assignedto: 'Snehil Chaturvedi',
                iconCls: 'task',
                leaf: true
            }]
        }]
    }
]}

1 个答案:

答案 0 :(得分:0)

ExtJS有一个很好的插件: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.tree.plugin.TreeViewDragDrop 阅读配置文件,它们非常重要且有用

将它放在你的treepanel的代码中:

    viewConfig: {
        plugins: {
            ptype: 'treeviewdragdrop'
        }
    },

此外,这是一个工作小提琴 我只是在商店里放了一些随机数据,不想格式化你的所有数据

Ext.onReady(function () {

Ext.define('Task', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'task', type: 'string' },
        { name: 'assignedto', type: 'string' }
    ]
});

var store = Ext.create('Ext.data.TreeStore', {
    model: 'Task',
    folderSort: false,
    root: {
        expanded: true,
        children: [
            {
                task: 'Child 1',
                assignedto: 'me',
                leaf: true
            },
            {
                task: 'Child 2',
                assignedto: 'me',
                expanded: true,
                children: [
                    {
                        task: 'GrandChild 1',
                        assignedto: 'you',
                        leaf: true
                    }
                ]
            },
            {
                task: 'Child 3',
                assignedto: 'me',
                expanded: true,
                children: [
                    {
                        task: 'GrandChild 2',
                        assignedto: 'you',
                        leaf: true
                    }
                ]
            },
        ]
    }
});

var tree = Ext.create('Ext.tree.Panel', {

    viewConfig: {
        plugins: {
            ptype: 'treeviewdragdrop'
        }
    },

    title: 'Core Team Projects',
    width: 500,
    height: 300,
    renderTo: Ext.getBody(),
    collapsible: true,
    useArrows: true,
    rootVisible: false,
    store: store,
    multiSelect: true,
    singleExpand: true,
    columns: [{
        xtype: 'treecolumn',
        text: 'Task',
        flex: 2,
        sortable: true,
        dataIndex: 'task'
    }, {
        text: 'Assigned To',
        flex: 1,
        dataIndex: 'assignedto',
        sortable: true
    }]
});
});