Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2012, 07:56
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

честно говоря не сталкивался с подобной реализацией ДД и не совсем понимаю суть проблемы
notifyEnter отрабатывает при входе в dropZone так ведь?

notifyEnter: function(ddSource, e, data) {
    return !alreadyExists(this.getTargetFromEvent(e), data) ? this.dropAllowed : this.dropNotAllowed;
},


а source.proxy.setStatus у вас правельно отрабатывает в onNodeEnter? Во всяком случае статус изменяется если принудительно проставлять...
Ответить с цитированием
  #3 (permalink)  
Старый 03.04.2012, 08:50
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Сообщение от nekto_O Посмотреть сообщение
честно говоря не сталкивался с подобной реализацией ДД и не совсем понимаю суть проблемы
Суть проблемы такова: когда буксируемый элемент входит в target показывается иконка dropAllowed. Я же хочу, в случае уже существования, показывать иконку dropNotAllowed дабы глупый пингвин юзвер не удивлялся тому, что элемент убегает обратно к себе домой в дерево. Превентивные меры, так сказать...
Сообщение от nekto_O Посмотреть сообщение
notifyEnter отрабатывает при входе в dropZone так ведь?
Да. И notifyEnter, и onNodeEnter вызываются, но, вот, их телодвижения не возымеют действия. Хотя, проверял debugger'ом,
Сообщение от nekto_O Посмотреть сообщение
source.proxy.setStatus у вас правельно отрабатывает
отрабатывает.

P.S. А то, что их двое (и notifyEnter, и onNodeEnter) - то я уже от "...безсилої люті...", так сказать... Конечно, в итоге, нужно юзать что-то одно...
P.P.S. BTW, так и не постиг задлянафига и notifyX и onNodeX и что и когда юзать по феншую...
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
  #4 (permalink)  
Старый 04.04.2012, 11:43
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от Ex_Soft
Посредством notifyOver/onNodeOver - все работает. Но они ж дергаются на каждое дергание мыши, а вместе с ними, соответственно, и alreadyExists().
Подтверждаю, так и есть. Собственно не нашел ничего лучше чем:
...
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 отрабатывать будет только при входе в дропзону, а не при каждом перемещении драг-элемента.
Ответить с цитированием
  #5 (permalink)  
Старый 04.04.2012, 12:03
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Сообщение от nekto_O Посмотреть сообщение
понимаю что это в некотором роде извращение
Вот и я ж о чем...
/me думает: шо ж это они так неаккуратненько-то с Enter'ом...
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ActionScript - как изменить значение soundbuftime? Маэстро Flash 6 14.01.2012 15:08
Как в greybox изменить положение стрелок и кнопки выхода? Kaner Библиотеки/Тулкиты/Фреймворки 0 10.12.2011 20:10
Как программно изменить масштаб страницы в IE8? Sergey_New Общие вопросы Javascript 5 14.06.2011 16:04
Как изменить положение scrollbara PAMAC Общие вопросы Javascript 2 15.02.2010 12:03
Как изменить текст при наведении курсора? sewernik Элементы интерфейса 2 13.04.2009 19:31