Показать сообщение отдельно
  #1 (permalink)  
Старый 02.04.2012, 16:23
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Как изменить 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?

Последний раз редактировалось Ex_Soft, 03.04.2012 в 00:10.
Ответить с цитированием