extjs 4 grid fireevent itemclick

时间:2011-07-28 10:07:52

标签: extjs4

如何在商店加载后制作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);
       }
    }
}

基本上,当网格加载时,它应该触发所选第一行的警报窗口 网格。

2 个答案:

答案 0 :(得分:10)

itemclickView的事件,而不是Grid的事件。尝试使用:

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

顺便说一句,为什么不改用selectionchange

<强>更新

如果您同时拥有itemcontextmenuselectionchange处理程序,则可能会有点混乱。在这种情况下,我建议返回原点并使用itemclick事件。

但您的代码需要进行一些修改:

  1. itemclick事件分配给网格,而不是视图。
  2. 当触发itemclick传递实际记录时,不是索引
  3. 像这样:

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

    这是fiddle来证明我在说什么。

答案 1 :(得分:0)

经过几个小时的搜索,我找到了解决方案。看起来ExtJs4存在一个问题,使得以下功能对我无法起作用:

grid.getSelectionModel().select(0);

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侦听器。