2012-03-02 4 views
5

Я создал сетку с extjs 4. Выбирает. CheckboxModel реализован. Это означает, что строка выбирается/отменяется, когда вы нажимаете на определенную строку. Теперь я хочу отключить этот выбор в последнем столбце, так как он содержит пользовательские кнопки. (Я не хочу выбирать строку, если нажата кнопка).ExtJS 4 - Grid - Отключить выбор строки для определенного столбца

Любая идея, как это сделать?

Большое спасибо заранее!

ответ

9

Это на самом деле сложная небольшая проблема, хотя бы потому, что документации Sencha не хватает.

CheckboxModel действительно имеет событие beforeselect, унаследованное от Ext.selection.RowModel. Однако нет простого способа получить индекс столбца, потому что, откровенно говоря, это точка RowModel.

Однако есть недокументированное событие в Ext.view.Table (которое ваша сетка наследует) называется beforecellmousedown. Вот параметры события:

  1. вид: Вид сетки
  2. клеток: клетки, которая была нажата
  3. cellIndex: Индекс ячейки
  4. запись: Магазин запись, связанная с ячейкой
  5. строка: строка ячейки
  6. RowIndex: индекс строки
  7. eOpts: Стандартный вариант событий события

Таким образом, вы, вероятно, попробовать что-то вроде этого:

viewConfig: { 
    listeners: { 
     beforecellmousedown: function(view, cell, cellIdx, record, row, rowIdx, eOpts){ 
      if(cellIdx === indexOfLastColumnInGrid){ 
       return false; 
      } 
     } 
    } 
} 

И ячейки и строки индексов начинается с нуля.

+0

Спасибо Эрик! Я попробую! – user1245146

0
+0

Уважаемый Aliaksei, спасибо за ваш ответ. – user1245146

+0

Внутри «beforeselect», как я могу проверить, какая колонка была нажата? – user1245146

1
listeners: { 
    beforecellmousedown: function(view, cell, cellIdx, record, row, rowIdx, eOpts) { 
     if (String(eOpts.getTarget()) == '[object HTMLButtonElement]') { 
      return false; 
     } 
    } 
} 

Thanx Eric. Это окончательное решение!

Смежные вопросы