选择事件checkcolumn中的ExtJS4 fireEvent不起作用

时间:2014-05-08 07:26:08

标签: grid extjs4

我正在尝试在Ext.grid.Panel上的select事件上使用虚拟事件处理程序。但是,如果我使用 fireEvent(' RequestSelect'),则对于外部观察者(控制器),checkcolumn不能在所选行上工作,也不能在键盘上使用箭头导航。如果我用 this.fireEvent(' RequestSelect')评论行,那么checkcolumn效果很好。

Ext.define('OrionWebClient.view.RequestList',{
extend: 'Ext.grid.Panel',
id:'rqstlst',
title:'Список запросов',
alias:'widget.requestlist',
border:true,
requires:['Client.model.Request'],    
columns:{
    defaults:{
        draggable:false,
        sortable:false,
        hideable:false,
        resizable:false
    },
    items:[
        { text: '#', xtype:'rownumberer', width: 30 },
        { text: 'команда', dataIndex: 'commandName', width: 250},
        { text: 'параметры', dataIndex: 'params', width: 250},
        { text: '*', dataIndex: 'check', xtype: 'checkcolumn', width: 30 }
    ]
},
store:{
    model: 'Client.model.Request',
    autoLoad:true
},
initComponent:function () {
    this.callParent();



    this.on({
        select:this._OnRequestSelect
    });

    this.SetCurrentIndex(-1);

    this.addEvents({
        RequestSelect:true,
        AddRequest: true,
        RemoveRequest: true,
        RequestUp: true,
        RequestDown: true
     });
    },

GetCurrentIndex:function(){
    return this.m_cur_index;
},
SetCurrentIndex:function (index,render) {
    if (render){
        var smodel = this.getSelectionModel();
        if (index == -1){
            smodel.deselectAll();
            this.fireEvent('Deselect');
        }
        else{
            smodel.select(index);  
        }

    }
    this.m_cur_index = index;
},
_OnSendRequest:function () {
    var rqst_list = this._GetRequestToSend();
    this.fireEvent('RequestSend',rqst_list);
},

_OnRequestSelect:function(grid, rec, index){
    this.SetCurrentIndex(index, false);
    this.fireEvent('RequestSelect', rec);
},

MoveSelection:function(start, stop, direct){
    var index = {
        _old: this.GetCurrentIndex(),
        _new: this.GetCurrentIndex()
    };

    if (index._old==-1){
        this.SetCurrentIndex(start,true);
        return index;
    }
    if (index._old==stop){
        return index;
    }
    index._new += direct;
    this.SetCurrentIndex(index._new,true);

    return index;
},

_OnButtonUp:function(){
    var max = this.GetMaxIndex();
    var index = this.MoveSelection(max, 0, -1);
    this.fireEvent('RequestMove',index);
},
_OnButtonDown:function(){
    var max = this.GetMaxIndex();
    var index = this.MoveSelection(0, max, 1);
    this.fireEvent('RequestMove', index);
},
GetMaxIndex:function () {
    var store = this.getStore();
    return store.getCount()-1;
}
});

PS抱歉我的英语不好=(

1 个答案:

答案 0 :(得分:0)

处理事件有几种方法,我更喜欢的只是在控制器中监听这些事件而不向视图添加任何逻辑。

Ext.define('OrionWebClient.controller.Main', {
    extend: 'Ext.app.Controller',
    views: [
        'RequestList'
    ],
    init: function() {
        this.control({
            'RequestList': {
                select: this.onSelect
            }
        });
    },
    onSelect: function(this, record, index, eOpts){
        console.log('selected'+record);
    }
});