#extjs
#extjs
Вопрос:
У меня есть таблица grid в Ext Js с выделением.CheckboxModel Я могу многократно выбирать элементы в сетке, но, похоже, также щелчок правой кнопкой мыши может выбирать элементы
Вопрос в том, есть ли какой-либо способ удалить щелчок правой кнопкой мыши, чтобы он не выбирал элемент / ы?
Заранее спасибо, Боб
Ответ №1:
Чтобы предотвратить выбор с помощью правой кнопки, вы можете использовать этот код (с Ext JS 4)…
var allowSelection=true;
…
grid.on('beforeitemmousedown', function(grid, record, item, index, event, eOpts) {
if (event.button==0) allowStreetSelection=true; else allowSelection=false;
});
grid.on('beforeselect', function(grid, record, index, eOpts) {
return allowSelection;
});
Ответ №2:
Чтобы остановить контекстное меню, вы можете перехватить rowcontextmenu
событие и остановить его.
grid.on('rowcontextmenu', function(grid,index,e) { e.stopEvent() });
Это также может решить вашу проблему с выбором строк, но щелчок правой кнопкой мыши не выбирает строки для меня. Какую версию ExtJS вы используете и в каких браузерах вы видите эту проблему? На ExtJS 3.3 и Firefox 4 и IE 8-9 я не могу воспроизвести это.
Редактировать: Для Ext 4, containercontextmenu выглядит как событие, которое нужно перехватить. Возврат false из этого обработчика должен остановить отображение контекстного меню. У меня нет большого опыта работы с Ext 4, поэтому дайте мне знать, если это сработает для вас.
Комментарии:
1. Версия 4.0.1 (последняя стабильная). Вы можете увидеть это в действии здесь: dev.sencha.com/deploy/ext-4.0.0/examples/grid/array-grid.html .. Попробуйте щелкнуть правой кнопкой мыши по любой из строк, и выбор будет сделан. Я еще не нашел способ отключить это поведение.
2. Боб, я покопался в документах ExtJS 4 и нашел вероятного кандидата.
3. уэс, спасибо! Проблема не в contextmenu, а в том, что его можно выбрать с помощью щелчка правой кнопкой мыши. Я хочу выбрать n элементов, щелкнуть правой кнопкой мыши (используя itemcontextmenu) и отобразить мое меню, но поскольку щелчок правой кнопкой мыши также выбирает, я теряю свой выбор. Думаю, я могу решить это с помощью кодирования, но я надеялся, что можно отменить выбор сетки при щелчке правой кнопкой мыши.
Ответ №3:
Для меня это сработало как шарм (EXTJS 4.1.2):
grid.on('beforeitemmousedown', function(grid, record, item, index, event, eOpts) {
return (event.button == 0);
});
Ответ №4:
Мы также столкнулись с той же проблемой при использовании ExtJS4, наше решение на данный момент заключается в изменении исходного кода в ExtJS.
Найти:
} else if (me.isSelected(record) amp;amp; !e.shiftKey
amp;amp; !e.ctrlKey amp;amp; me.selected.getCount() > 1)
{
me.doSelect(record, keepExisting, false);
Вы можете найти их в ext-all.js
или в src/selection/Model.js
И измените его на:
} else if (me.isSelected(record) amp;amp; !e.shiftKey amp;amp; !e.ctrlKey amp;amp; me.selected.getCount() > 1) {
if (e.button != 0)
keepExisting = true;
else
keepExisting = false;
me.doSelect(record, keepExisting, false);
Этот код предотвратит очистку текущего выбора элемента, за исключением того, что вы нажимаете на элемент кнопкой мыши 0 (левая кнопка).