Как изменить DD статус?
Хочу проверять существование перетаскиваемого объекта в получателе и изменять статус с 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? |
честно говоря не сталкивался с подобной реализацией ДД и не совсем понимаю суть проблемы
notifyEnter отрабатывает при входе в dropZone так ведь?
notifyEnter: function(ddSource, e, data) {
return !alreadyExists(this.getTargetFromEvent(e), data) ? this.dropAllowed : this.dropNotAllowed;
},
а source.proxy.setStatus у вас правельно отрабатывает в onNodeEnter? Во всяком случае статус изменяется если принудительно проставлять... |
Цитата:
Цитата:
Цитата:
P.S. А то, что их двое (и notifyEnter, и onNodeEnter) - то я уже от "...безсилої люті...", так сказать... Конечно, в итоге, нужно юзать что-то одно... P.P.S. BTW, так и не постиг задлянафига и notifyX и onNodeX и что и когда юзать по феншую... |
Цитата:
...
locked: false,
...
onNodeOver : function(target, dd, e, data) {
....
return !this.locked ? this.dropAllowed : this.dropNotAllowed;
},
notifyEnter: function(ddSource, e, data) {
this.locked = alreadyExists(this.getTargetFromEvent(e), data);
...
}
понимаю что это в некотором роде извращение, но лучшего варианта не нашел, по крайней мере здесь alreadyExists отрабатывать будет только при входе в дропзону, а не при каждом перемещении драг-элемента. |
Цитата:
/me думает: шо ж это они так неаккуратненько-то с Enter'ом... |
| Часовой пояс GMT +3, время: 01:06. |