0

我是 Ext JS 的新手,我尝试过“拖放”,当我拖动行时它工作正常。我现在正在尝试从左侧网格中拖动一行(来自 MySQL 的字段)并将其放在右侧网格上,从而将数据库表中的数据作为一列提供。

我现在使用的代码是,

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

    Ext.define('DataObject', {
        extend: 'Ext.data.Model',
        fields: ['Field']
    });

    Ext.onReady(function(){

            var firstGridStore = Ext.create('Ext.data.Store', {
            model: 'DataObject',

                autoLoad: true,
                pageSize: 4,
                proxy: {
                    type: 'ajax',
                    url : 'user.php',
                    reader: {
                    type: 'json',
                    root: 'users'            
                }
            }
        });

        // Column Model shortcut array
        var columns = [
            {text: "Fields", sortable: true, width: 50, dataIndex: 'Field'}
        ];

        var firstGrid = Ext.create('Ext.grid.Panel', {
            multiSelect: true,
            viewConfig: {
                plugins: {
                    ptype: 'gridviewdragdrop',
                    dragGroup: 'firstGridDDGroup',
                    dropGroup: 'secondGridDDGroup'
                },
                listeners: {
                    drop: function(node, data, dropRec, dropPosition) {
                        var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
                        Ext.example.msg("Drag from right to left", 'Dropped ' + data.records[0].get('name') + dropOn);
                    }
                }
            },
            store            : firstGridStore,
            columns          : columns,
            stripeRows       : true,
            title            : 'First Grid',
            margins          : '0 2 0 0'
        });

        var secondGridStore = Ext.create('Ext.data.Store', {
            model: 'DataObject'
        });

        // create the destination Grid
        var secondGrid = Ext.create('Ext.grid.Panel', {
            viewConfig: {
                plugins: {
                    ptype: 'gridviewdragdrop',
                    dragGroup: 'secondGridDDGroup',
                    dropGroup: 'firstGridDDGroup'
                },
                listeners: {
                    drop: function(node, data, dropRec, dropPosition) {
                        var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
                        Ext.example.msg("Drag from left to right", 'Dropped ' + data.records[0].get('name') + dropOn);
                    }
                }
            },
            store            : secondGridStore,
            columns            : columns,
            stripeRows       : true,
            title                   : 'Second Grid',
            margins             : '0 0 0 3'
        });

        //Simple 'border layout' panel to house both grids
        var displayPanel = Ext.create('Ext.Panel', {
            layout: 'fit',
            height       : 300,
            layout       : {
                type: 'hbox',
                align: 'stretch',
                padding: 5
            },
            renderTo     : 'panel',
            defaults     : { flex : 1 }, //auto stretch
            items        : [
                firstGrid,
                secondGrid
            ],
            dockedItems: {
                xtype: 'toolbar',
                dock: 'bottom',
                items: ['->', // Fill
                {
                    text: 'Reset both grids',
                    handler: function(){
                        //refresh source grid
                        firstGridStore.loadData(myData);

                        //purge destination grid
                        secondGridStore.removeAll();
                    }
                }]
            }
        });
    });

根据我的要求,左侧网格中的字段应该是右侧网格上数据(来自数据库)的标题。

左侧网格将有网格数据,如:
字段
id
名称
数据
从左侧网格拖动数据后,右侧网格应具有如下数据:
id
1
2
3
注意:这里只拖动 id。

有人可以帮我吗?

谢谢。

4

2 回答 2

2

您可以使用“beforedrop”而不是“drop”事件,但是您可以通过为 dropFunction 属性分配一个新函数来设置自己的自定义 drop 处理程序,希望成为帮助您解决问题的聚光灯!还看到http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.plugin.DragDrop

于 2012-11-17T23:01:50.967 回答
0

有几件事要记住..

  1. 您的模型驱动布局 - 您正在定义一个字段“字段”的“数据对象”,由 users.php json 调用/返回填充,如果您希望 json-return 中的所有字段都是可拖动的,那么您需要包含模型中的所有字段,即

    Ext.define('DataObject', {
        extend: 'Ext.data.Model',
        fields: [
           'id',
           'name',
           'data'
        ]
    });
    
  2. 字段名称必须在源和目标之间匹配以进行拖放 - 只要您想要的拖放字段名称相同(dataField 定义),那么您的拖放代理将拉出所有您想要的项目。

  3. 自然,如果您只想显示标题,那么您的显示将是:

    items: [
       { dataIndex: 'id', hidden: true } ,
       { dataIndex: 'name', hidden: true },
       { text: 'title', dataIndex: 'data', width: xx }   // loose example
    ]
    

拖放代理将拉动网格/表单行中的所有内容,无论是显示还是隐藏..

希望这可以帮助

于 2014-12-04T15:33:42.193 回答