所以我有多个Ext.dd.DragSource和Ext.dd.DropTarget对象。为了获得我需要的正确行为,我将逻辑附加到这两个对象上的事件。不可能将所有逻辑都附加到拖放或拖放上。
我的问题是,当我在拖放对象上设置onDragOut和onDragEnter时,它们会阻止notifyEnter和notifyOut在拖放对象上触发。
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,不幸的是目前我被这个版本卡住了。这方面的任何帮助都是很好的。
发布于 2013-03-05 04:56:17
由于没有答案,我将只添加我当前正在使用的工作。这不是问题的解决方案,只是回避问题的另一种选择。
因此,由于我不能让这两个事件同时在拖放元素上触发,所以我只是使用不同的事件。
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-09 07:40:36
查看ExtJS文档和源代码,我认为您正在重写onDragEnter和onDragOut,其中原始函数将触发对notifyEnter和notifyOut的调用。我建议只覆盖文档(http://docs.sencha.com/ext-js/4-1/#!/api/Ext.dd.DragSource)中列出的“默认情况下为空函数”的函数,例如beforeDragEnter和beforeDragOut。
如果您确实需要覆盖这些方法,我建议您保存原始方法并从您的函数中调用它们。如果您需要有关该模式帮助,我可以编辑我的答案以提供一个示例。
https://stackoverflow.com/questions/15098902
复制相似问题