Удалить контекстное меню / щелкните правой кнопкой мыши во внешней JS-сетке

#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 (левая кнопка).