extjs 4 сетка fireevent элементclick

Как сделать fireEvent itemclick после загрузки магазина.

У меня есть это, но это не работает:

pcfstore.on('load', function(){
   //auto select first row;
   Ext.getCmp('pcf_grid').getSelectionModel().select(0); // this works

   //fire itemclick event
  var grid= Ext.getCmp('pcf_grid');
  grid.fireEvent('itemclick', grid, 0); //this doesnt work

}); 

Вот мое событие itemclick в виде сетки:

viewConfig: {
    listeners: {
    itemclick: function(dv, record, item, index, e) {
           alert(record.data.code);
       }
    }
}

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


person Carlo    schedule 28.07.2011    source источник


Ответы (2)


itemclick является событием View, но не Grid. Попробуй использовать:

grid.getview().fireEvent('itemclick', grid, 0);

И, кстати, почему бы не использовать selectionchange вместо этого.

ОБНОВЛЕНИЕ

Если у вас есть обработчики itemcontextmenu и selectionchange, это может немного сбить с толку. В этом случае я рекомендую вернуться к исходной точке и использовать событие itemclick.

Но ваш код должен иметь некоторые модификации:

  1. Назначьте событие itemclick сетке, а НЕ ее представлению.
  2. При запуске itemclick передается фактическая запись, а НЕ индекс

нравится:

grid.getSelectionModel().select(0);
grid.fireEvent('itemclick', grid, grid.getSelectionModel().getLastSelected());

А вот fiddle, чтобы продемонстрировать, о чем я говорю.

person Molecular Man    schedule 28.07.2011
comment
Спасибо за быстрый ответ. однако - я использовал этот пример действия сетки, который показывает контекстное меню при щелчке правой кнопкой мыши. Я изменил щелчок элемента fireEvent на Selectionchange, как вы советовали. Я хотел, чтобы это произошло: если я щелкну левой кнопкой мыши, появится предупреждающее сообщение, а при щелчке правой кнопкой мыши появится контекстное меню. Что он делает прямо сейчас, так это то, что если я щелкну правой кнопкой мыши элемент в сетке, он все равно покажет окно с предупреждением. знаете какой-нибудь обходной путь, который поможет? ТНК еще раз. - person Carlo; 29.07.2011
comment
Событие selectionchange срабатывает раньше, чем событие itemcontextmenu, поэтому оно по-прежнему показывает окно предупреждения, даже если я щелкаю правой кнопкой мыши. Еще раз спасибо за помощь. ценить это. - person Carlo; 29.07.2011
comment
Извините, но я пробовал это на extjs4.2, и я получаю ошибку Cannot read property 'shiftKey' of undefined, и она указывает на строку кода grid.getview().fireEvent('itemclick', grid, 0);.. - person Razgriz; 07.01.2016

После нескольких часов поиска я нашел решение. Похоже, есть проблема с ExtJs4, из-за которой у меня не работают следующие функции:

grid.getSelectionModel().select(0);

or

grid.getView().select(0); // note that this function is deprecated in ExtJS4!!

Вместо этого в моем контроллере я использую этот код:

store.load({
    callback: function (records, operation, success) {        
        var rowIndex = this.find('id', myRecord);  //where 'id': the id field of your model. You can replace 'id' with your unique field.. And 'this' is your store.
        grid.getView().select(rowIndex);
    }
})

Где myRecord — это запись, которую нужно выделить и выбрать. Затем это сработало как шарм. Я выделил и выбрал строку 0. Однако слушатели itemclick не срабатывали, когда строка была выбрана с помощью этого кода.

person JLavoie    schedule 22.09.2013