Хочу проверять существование перетаскиваемого объекта в получателе и изменять статус с dropAllowed на dropNotAllowed ежели оный уже существует.
var
alreadyExists = function(target, data) {
var
text = data.records[0].get("text"),
el = Ext.fly(target),
exists = el.select(".appended");
return Ext.Array.some(exists.elements, function(item, index, allItems) {
return item.innerHTML == text;
});
},
dropZone = Ext.create("Ext.dd.DropZone", dropTarget, {
ddGroup: "tree2div",
getTargetFromEvent: function(e) {
return e.getTarget("div.drop-target");
},
notifyEnter: function(ddSource, e, data) {
return !alreadyExists(this.getTargetFromEvent(e), data) ? Ext.dd.DropZone.prototype.dropAllowed : Ext.dd.DropZone.prototype.dropNotAllowed;
},
onNodeEnter: function(target, source, e, data) {
source.proxy.setStatus(!alreadyExists(target, data) ? Ext.dd.DropZone.prototype.dropAllowed : Ext.dd.DropZone.prototype.dropNotAllowed);
},
/*notifyOver: function(ddSource, e, data) {
return !alreadyExists(this.getTargetFromEvent(e), data) ? Ext.dd.DropZone.prototype.dropAllowed : Ext.dd.DropZone.prototype.dropNotAllowed;
},*/
onNodeOver: function(target, source, e, data) {
return !alreadyExists(target, data) ? Ext.dd.DropZone.prototype.dropAllowed : Ext.dd.DropZone.prototype.dropNotAllowed;
},
onNodeDrop: function(target, dd, e, data) {
if(alreadyExists(target, data))
return false;
var
text = data.records[0].get("text"),
el = Ext.fly(target);
Ext.DomHelper.append(el, { tag: "div", html: text, cls: "appended" }) ;
return true;
}
});
Посредством
notifyOver/
onNodeOver - все работает. Но они ж дергаются на каждое дергание мыши, а вместе с ними, соответственно, и
alreadyExists().
notifyEnter/
onNodeEnter же - дергаются один раз. Но попытки изменить в них статус - тщетны. Как можно, если, таки, можно, заюзать
notifyEnter/
onNodeEnter?