2

我正在使用 ExtJS 拖放并尝试将拖动代理置于光标下方的中心(代理:表示被拖动元素的半透明填充物)。我可以像这样在物理上居中,但之后它不会正确下降:

view.dragZone = Ext.create('Ext.dd.DragZone', view.getEl(), {

    onStartDrag: function(x, y) {
        this.setDelta(150, 20); // (the element is 300 x 40)
    },

    //.. other DD configs

});

当我使用它并将光标移动到放置区域时,它只是滑回原始位置,就好像我将它随机放置在某个地方一样。

如果我不使用它,光标大约是对象的 20 像素 NW(即不居中),但我可以将它完全放在放置区域中。

我认为它可能与光标不直接位于放置区域上方有关,因为它现在直接位于拖动代理上方。我尝试重置拖放区的 z-index 以尝试将其置于拖动代理之上,但这似乎不起作用。尝试了其他一些不值得一提的非常随机的事情。

有没有人成功设置拖放以使拖动代理以光标为中心?

4

1 回答 1

3

我能够将代理居中并在网格拖放插件的实时预览中看到它正确放置。

Ext.create('Ext.data.Store', {
    storeId:'simpsonsStore',
    fields:['name'],
    data: [["Lisa"], ["Bart"], ["Homer"], ["Marge"]],
    proxy: {
        type: 'memory',
        reader: 'array'
    }
});

var p = Ext.create('Ext.grid.Panel', {
    store: 'simpsonsStore',
    columns: [
        {header: 'Name',  dataIndex: 'name', flex: true}
    ],
    viewConfig: {
        plugins: {
            ptype: 'gridviewdragdrop',
            dragText: 'Drag and drop to reorganize'
        }
    },
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});

p.view.plugins[0].dragZone.onStartDrag = function() {
    this.setDelta(80, 10);
};

Ext.view.DragZone看起来和 没有太大区别Ext.dd.DragZone。但是,Ext.view.DropZone添加了相当多的逻辑来检查记录被丢弃的位置。我猜这个逻辑可能是网格拖放插件正常工作的原因。

于 2013-03-07T04:52:44.160 回答