I also observed this phenomenon. Instead of trying to stop the propagation of events between the two potential drop-targets, I defined a 'notifyDrop' method on the drop-target that I wanted to handle the event. Then in my 'onDragDrop' method, I checked for the existence of that method on the drop target objects. If it had the method, then I called it and let the drop-target handle the logic from that point on. That way even though the event is fired twice, only the target that can handle it actually gets the flow control.
In my DDProxy subclass:
Code:
onDragDrop: function(e, drag_id){
var DDM = Ext.dd.DragDropMgr;
var my_dd = DDM.getDDById(drag_id);
if(my_dd.notifyDrop != null){
my_dd.notifyDrop(this, e, {data_to_pass_through : 'foobar'});
}
}
In my DDTarget subclass:
Code:
notifyDrop : function(source, event, data){
// Handle event from here
}
Although you might want to change the name of your 'notifyDrop' method, as I think that Ext uses that in some way...