Ну а при таком варианте мы просто затираем функциональность метода класса 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;
},
То есть вы убрали позиционирование индикатора дропа + валидацию от попыток дропнуть записи на самих себя. |
Но если перечисленное не критично, тогда конечно вариант.
|
Мда, поспешил.
|
В принципе нет ничего невозможного ..как говорится "и зайца можно научить курить" (с).
Можно вот так сделать если хотите без оверрайда:
{
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;
}
}
}
}
}
|
Увы, заяц не закурил.
https://fiddle.sencha.com/#fiddle/120q Индикатор показывает что дроп запрещен, но де-факто дроп срабатывает, и строки реорганизуются. |
Чтобы дроп не срабатывал, нужно править в другом месте. В событии drop.
|
Это конечно тоже может пригодится в хозяйстве :) Однако в приоритете именно запрет дропа в неположенных местах. Видимо, никуда мне не деться от грязного хака...
|
Цитата:
Я конечно и так могу, но получается как-то избыточно. Одна проверка в beforeDrop, другая в onNodeOver, а делают они по сути одно и то же. А вот так чтоб все в одном месте - не выходит, если по правилам писать. В общем, меня несколько разочаровывает эта функциональность. |
Вы какбы вначале писали что с запретом дропа у вас все уже пучком ..и проблема в том чтоб показывать индикатор как надо.
|
Я хотел все эти вопросы решить переопределив или добавив один метод. А получается что надо и событие обрабатывать, и метод переопределять. Не то чтобы я был такой ленивый, просто не люблю дублировать функционал. А вот придется, если без хаков делать. И кстати, ваш метод не полностью решает вопрос индикатора: класс плавающего сообщения меняется, но вот зеленая полоска, показывающая позицию дропа, не пропадает в запретных зонах.
|
| Часовой пояс GMT +3, время: 09:10. |