ExtJS4 - grid itemkeydown

84 views
Skip to first unread message

DanilG

unread,
Dec 30, 2011, 4:10:06 AM12/30/11
to ruextjs
С наступающим всех!
Никто не сталкивался, как перехватывать нажатия клавиш на гриде?

Например, мне надо сделать так, чтобы при нажатии стрелок <- ->
перемещаться можно было только в пределах колонок текущей записи.
Стандартно перемещение идет сквозное по всем записям, т.е. если стоим
на первой колонке и нажали влево - переходит на последнюю колонку
предыдущей записи.

Пробую написать обработчик itemkeydown или beforeitemkeydown (ну и
контейнер тоже для кучи):
...
viewConfig:{
listeners : {
itemkeydown : function(){
alert('Нажали клавишу!');
},
beforeitemkeydown : function(){
alert('Перед нажатием клавиши!');
},
containerkeydown : function(){
alert('При нажатии клавиши на контейнере!');
},
beforecontainerkeydown : function(view, event, opts){
alert('Перед нажатием клавиши на контейнере!');
event.stopEvent();
return false;
}
}
}
...

Срабатывают только containerkeydown и beforecontainerkeydown. Если их
убрать (а вдруг они имеют приоритет), то вообще ноль реакции.
Я бы обошелся beforecontainerkeydown, но и тот зараза, не дает
прервать событие типа return false, или event.stopEvent(). Ощущение
такое, что надо либо делать как-то иначе, либо пока занести в раздел
багов.

Григорий Беляков

unread,
Dec 30, 2011, 4:53:40 AM12/30/11
to rue...@googlegroups.com
Снаступающим через KeyMap не пробовал?

30 декабря 2011 г. 13:10 пользователь DanilG <eur...@mail.ru> написал:

--
Вы получили это сообщение, поскольку подписаны на группу ruextjs.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу rue...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу ruextjs+u...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/ruextjs?hl=ru.


DanilG

unread,
Dec 30, 2011, 5:23:01 AM12/30/11
to ruextjs
Попробовал, и keyNav попробовал. На клавиши реагирует, но в нем опять
же не получилось предотвратить стандартные действия. Т.е. я
инициировал в событии 'afterrender' grid.view:

var map = new Ext.util.KeyMap(this.getEl(), [
{
key: [13],
handler: function(code, event){
alert("Return was pressed!");
event.preventDefault(); //во имя отца
event.stopPropagation(); //и святого духа
event.stopEvent(); //аминь!
return false; //и контрольный!
},
defaultEventAction : 'stopEvent' //доп. опция по документации
}
...
]);

Похоже, я понял куда копать. В selectionModel! На первый взгляд, нужно
брать молоток и дрель в руки и переопределять onKeyLeft, onKeyRight
Если не получится, отпишу здесь.
Но в целом, по ситуации можно пока сказать, что extJS4 сыровата.

On 30 дек, 13:53, Григорий Беляков <greg.rab...@gmail.com> wrote:
> Снаступающим через
> KeyMap<http://docs.sencha.com/ext-js/4-0/#!/api/Ext.util.KeyMap>не
> пробовал?
>
> 30 декабря 2011 г. 13:10 пользователь DanilG <euro...@mail.ru> написал:

Григорий Беляков

unread,
Dec 30, 2011, 5:41:35 AM12/30/11
to rue...@googlegroups.com
согласен сыровата, но очень уж манит прирост скорости и нептуновская тема)))

30 декабря 2011 г. 14:23 пользователь DanilG <eur...@mail.ru> написал:

DanilG

unread,
Dec 30, 2011, 8:34:48 AM12/30/11
to ruextjs
Кстати, да! А где ее взять-то эту нептуновскую тему? Насколько я
понял, они ее выпустят только с 4.1?

On 30 дек, 14:41, Григорий Беляков <greg.rab...@gmail.com> wrote:
> согласен сыровата, но очень уж манит прирост скорости и нептуновская тема)))
>

> 30 декабря 2011 г. 14:23 пользователь DanilG <euro...@mail.ru> написал:

DanilG

unread,
Dec 30, 2011, 9:38:04 AM12/30/11
to ruextjs
Проблему решил, как в анекдоте. На третий день пребывания в заточении,
один из трех индейцев, Соколиный Глаз, прозванный за отменное зрение,
вдруг обнаружил, что одной стены не хватает!
Так и я, оказалось, в CellSelectionModel есть опция preventWrap. Ну
йопте, как раз отменяет сквозное перемещение по строкам по left или
right клавишам.

Далее, что еще обнаружил:
1. itemkeydown и beforeitemkeydown - срабатывает только для selModel =
'rowmodel'
2. containerkeydown и beforecontainerkeydown - срабатывает только для
selModel = 'cellmodel', при этом, не уточняется какая именно колонка,
но в принципе, это можно определить как текущую выделенную
3. Если в selModel отключить опцию enableKeyNav, все песец полный,
клавиатуру можно отложить, на нее грид вообще не будет реагировать, а
не только на стрелки.

Григорий Беляков

unread,
Dec 30, 2011, 3:53:35 PM12/30/11
to rue...@googlegroups.com
круть спасиб что отписался 
буду иметь  ввиду
а то седня из интереса тож парядком завис на этой теме))

30 декабря 2011 г. 18:38 пользователь DanilG <eur...@mail.ru> написал:

DanilG

unread,
Jan 10, 2012, 6:54:10 AM1/10/12
to ruextjs
Забавно, пощупал 4.1 b1, там все как раз наоборот в плане этих
пунктов:

On 30 дек 2011, 18:38, DanilG <euro...@mail.ru> wrote:
> 1. itemkeydown и beforeitemkeydown - срабатывает только для selModel =
> 'rowmodel'
> 2. containerkeydown и beforecontainerkeydown - срабатывает только для
> selModel = 'cellmodel'

Вот и не понятно - вроде исправили, но в то же время запутали опять в
другом.

Reply all
Reply to author
Forward
0 new messages