2016-01-07 5 views
1

Добрый день. Я создаю веб-приложение ExtJS4, и у меня есть «страница», где у меня есть Grid, записи которого поступают из базы данных. После загрузки хранилища сетки я хочу, чтобы первый элемент был выбран.ExtJS4 - Программный выбор строки сетки не вызывает событие itemclick?

Это то, что я пытался до сих пор:

store.load({ 
    callback: function() { 
     if(store.count() > 0){ 
      grid.getSelectionModel().select(0); 
      //grid.getView().select(0); 
     } 
    } 
}); 

Магазин загружает запись базы данных должным образом, как они показаны в моей сетке. Первая строка также выделяется так, как если бы она была нажата. Однако мой слушатель/контроллер для события itemclick не стреляет, а не вручную, когда я вручную нажимаю строку.

Я также пробовал grid.getView().select(0);, а также grid.getSelectionModel().selectFirstRow();, но, судя по всему, обе функции не являются функциями.

Неужели кто-нибудь сталкивался с этой ситуацией раньше? Моя строка сетки, по-видимому, выбрана функцией itemclick, которая вообще не называется.

Любая помощь очень ценится.

+2

Это ожидаемое поведение. 'itemclick' используется для щелчка строки. Если вы хотите прослушать выбранную строку, прослушайте события выбора. –

ответ

3

Вы должны использовать прослушиватель «selectionchange» в «Ext.selection.Model» вместо «itemclick» в классе сетки. Этот слушатель будет запущен в обоих случаях, когда строки будут нажаты в сетке, а строки выбираются программно.

Вероятно, код будет выглядеть следующим образом:

Ext.create('Ext.grid.Panel', { 
    selModel: Ext.create('Ext.selection.Model', { 
     ... 
     listeners: { 
      selectionchange: function(this, selected, eOpts) { 
       // Write your listener here or fire another event in view controller 
      } 
     } 
    } 
    store: ... 
}); 
+0

Спасибо, это сработало для меня. Если это помогает кому-либо, сделайте 'selected [0]', чтобы получить выбранную запись. – Razgriz