1

所以我有多个Ext.dd.DragSourceExt.dd.DropTarget对象。为了获得我需要的正确行为,我将逻辑附加到这两个对象上的事件中。不可能只将所有逻辑附加到拖放。

我的问题是,当我设置onDragOutonDragEnter拖动对象时,它们会停止notifyEnternotifyOut触发放置对象。

有没有办法让这两个事件都触发?

var ds = new Ext.dd.DragSource(id, { ddGroup: 'drops' });
ds.onDragEnter = function (e, id) { console.log('Drag Enter'); }
ds.onDragOut = function (e, id) { console.log('Drag Exit'); }

var dt = new Ext.dd.DropTarget(id, { ddGroup: 'drops' });
// These never fire.
dt.notifyEnter = function (source, evt, data) { console.log('Drop Enter'); }
dt.notifyOut = function (source, evt, data) { console.log('Drop Exit'); }

我正在使用 Extjs 4.0.2a,不幸的是,我目前仍坚持使用这个版本。对此的任何帮助都会很棒。

4

2 回答 2

0

由于没有答案,我将添加我目前正在使用的解决方法。这不是问题的解决方案,只是绕过问题的替代方案。

因此,由于我无法同时在拖放元素上触发这两个事件,我只是使用不同的事件。

var ds = new Ext.dd.DragSource(id, { ddGroup: 'drops' });
ds.onDragOver = function (e, id) { console.log('Drag Over'); }
ds.beforeDragOut = function (e, id) { console.log('Drag Out Almost'); }

尽管这些事件与我想要的并不完全相同,但通过一些额外的逻辑,我可以让它们以非常相似的方式行动。

如果有更好的解决方案,一种触发正​​确事件的方法,那么我会很高兴地接受它。

于 2013-03-04T20:56:16.707 回答
0

查看 ExtJS 文档和源代码,我认为您正在覆盖onDragEnterand ,其中原始函数将触发对andonDragOut的调用。我建议仅将文档(http://docs.sencha.com/ext-js/4-1/#!/api/Ext.dd.DragSource)中列出的函数覆盖为“默认为空函数”,例如,和.notifyEnternotifyOutbeforeDragEnterbeforeDragOut

如果您真的必须覆盖这些方法,我建议您保存原件并从您的函数中调用它们。如果您需要有关该模式的帮助,我可以编辑我的答案以提供示例。

于 2013-03-08T23:40:35.810 回答