Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Дополнительная проверка дропзоны (https://javascript.ru/forum/extjs/59805-dopolnitelnaya-proverka-dropzony.html)

siber-biber 03.12.2015 10:42

Ну а при таком варианте мы просто затираем функциональность метода класса Ext.view.DropZone.

Вот что он делает:
// The mouse is over a View node
    onNodeOver: function(node, dragZone, e, data) {
        var me = this;

        if (!Ext.Array.contains(data.records, me.view.getRecord(node))) {
            me.positionIndicator(node, data, e);
        }
        return me.valid ? me.dropAllowed : me.dropNotAllowed;
    },

То есть вы убрали позиционирование индикатора дропа + валидацию от попыток дропнуть записи на самих себя.

siber-biber 03.12.2015 10:46

Но если перечисленное не критично, тогда конечно вариант.

novikov 03.12.2015 11:00

Мда, поспешил.

siber-biber 03.12.2015 11:09

В принципе нет ничего невозможного ..как говорится "и зайца можно научить курить" (с).

Можно вот так сделать если хотите без оверрайда:
{
    viewConfig: {
		plugins: {
			ptype: 'gridviewdragdrop',
			dragText: 'Drag and drop to reorganize',
            dropZone : {
                onNodeOver : function (node, dd) {
                    // это вместо callParent()
                    var result = this.self.prototype.onNodeOver.apply(this, arguments);
                    
                    // we allow to drop to nodes having ID > 3
                    var record = dd.view.getRecord(node);
                    var isValid = record && record.getId() > 3;
                    
                    if (!isValid) {
                        return this.dropNotAllowed;
                    }

                    return result;
                }
            }
		}
	}
}

Infarch 03.12.2015 12:34

Увы, заяц не закурил.
https://fiddle.sencha.com/#fiddle/120q
Индикатор показывает что дроп запрещен, но де-факто дроп срабатывает, и строки реорганизуются.

novikov 03.12.2015 13:39

Чтобы дроп не срабатывал, нужно править в другом месте. В событии drop.

Infarch 03.12.2015 13:44

Это конечно тоже может пригодится в хозяйстве :) Однако в приоритете именно запрет дропа в неположенных местах. Видимо, никуда мне не деться от грязного хака...

Infarch 03.12.2015 14:05

Цитата:

Сообщение от novikov (Сообщение 398539)
Чтобы дроп не срабатывал, нужно править в другом месте. В событии drop.

А не в beforeDrop?

Я конечно и так могу, но получается как-то избыточно. Одна проверка в beforeDrop, другая в onNodeOver, а делают они по сути одно и то же. А вот так чтоб все в одном месте - не выходит, если по правилам писать. В общем, меня несколько разочаровывает эта функциональность.

siber-biber 03.12.2015 14:36

Вы какбы вначале писали что с запретом дропа у вас все уже пучком ..и проблема в том чтоб показывать индикатор как надо.

Infarch 03.12.2015 16:24

Я хотел все эти вопросы решить переопределив или добавив один метод. А получается что надо и событие обрабатывать, и метод переопределять. Не то чтобы я был такой ленивый, просто не люблю дублировать функционал. А вот придется, если без хаков делать. И кстати, ваш метод не полностью решает вопрос индикатора: класс плавающего сообщения меняется, но вот зеленая полоска, показывающая позицию дропа, не пропадает в запретных зонах.


Часовой пояс GMT +3, время: 18:41.