如何获取actioncolumn图标组件?

时间:2016-04-28 00:11:07

标签: extjs extjs3 gridpanel

我搜索了两天,无法在rowselect上找到如何访问actioncolumn组件(非html)。我需要使用enter image description hereSaki's component communication technique)在图标点击上设置事件。 我的专栏如下:

source

我找到了一种如何在更改行选择上显示/隐藏按钮的方法(此代码在GridPanel中使用):

sm: new Ext.grid.RowSelectionModel({
        singleSelect: true,
        listeners: {
            beforerowselect: function(grid, rowIndex, record) {

                // 7 is the last cell index
                var cell = grid.grid.getView().getCell( rowIndex, 7 );
                //select icons in cell
                var icons = Ext.DomQuery.select('.x-action-col-icon', cell);

                //for each DOM element
                Ext.each(icons, function(icon, index) {
                    currentIcon = Ext.get(icon);

                    //if not 1st button
                    if (index !== 0) {
                        //Delete class that hides. Class 'x-hidden' also works
                        currentIcon.removeClass('x-hide-display'); //show icon
                    }
                });
            },
            rowdeselect: function(grid, rowIndex, record) {

                // 7 is the last cell index
                var cell = grid.grid.getView().getCell( rowIndex, 7 );
                //select icons in cell
                var icons = Ext.DomQuery.select('.x-action-col-icon', cell);

                //for each DOM element
                Ext.each(icons, function(icon, index) {
                    currentIcon = Ext.get(icon);

                    //if not 1st button
                    if (index !== 0) {
                        //Delete class that hides. Class 'x-hidden' also works
                        currentIcon.addClass('x-hide-display'); //show icon
                    }
                });
            }
        }
    });

确定。下一个。我想在点击上显示另一个窗口(设置点击事件)。但我不知道如何从Window / Viewport获取访问权限:

//get items
this.loanGrid = this.items.itemAt(0);
this.documentsGridWindow = this.items.itemAt(2);

//add events
this.loanGrid.on ({
    scope: this,
    afterrender: function() {

        selModel = this.loanGrid.getSelectionModel();

        selModel.on({
            scope: this,
            rowselect: function (grid, rowIndex, keepExisting, record) {
                //HOW TO GET actioncolumn 2nd button here???

        }
    });

}
});

我还尝试在id上将beforerowselect设置为此图标,但在rowselect上,此代码Ext.getCmp('icon-id')会返回undefinedup()down()函数也无法帮助我=(

请帮助! =)

P.S。很遗憾,Ext.ComponentQuery仅适用于ExtJS 4.

1 个答案:

答案 0 :(得分:0)

所以最后我重新写了我的应用程序的一些部分。

首先,我们需要为actioncolumn添加一些选项:

dataIndex: 'action',
id: 'action',

网格行按钮现在显示/隐藏独立于actioncolumn移动:

 /**
 * buildSelectionModel
 */
buildSelectionModel: function() {
    var sm = new Ext.grid.RowSelectionModel({
        singleSelect: true,
        listeners: {
            scope: this,
            rowselect: function(grid, rowIndex, record) {
                this.toggleFirstButtonShowState(grid.grid, rowIndex);
            },
            rowdeselect: function(grid, rowIndex, record) {
                this.toggleFirstButtonShowState(grid.grid, rowIndex);
            }
        }
    });
    return sm;
},

/**
 * toggleFirstButtonShowState
 */
toggleFirstButtonShowState: function(grid, rowIndex) {

    //'action' is data index of
    var colIndex = this.getColumnIndexByDataIndex(grid, 'action');
    console.log(colIndex);

    // 7 is the last cell index
    var cell = grid.getView().getCell( rowIndex, colIndex);
    //select icons in cell
    var icons = Ext.DomQuery.select('.x-action-col-icon', cell);

    //for each DOM element
    Ext.each(icons, function(icon, index) {
        currentIcon = Ext.get(icon);

        //if not 1st button
        if (index !== 0) {
            //Show/delete class that hides. Class 'x-hidden' also works
            currentIcon.toggleClass('x-hide-display'); //show/hide icon
        }

    });
},

getColumnIndexByDataIndex: function(grid, dataIndex) {
    //columns
    gridColumns = grid.getColumnModel().columns;

    for (var i = 0; i < gridColumns.length; i++) {
       if (gridColumns[i].dataIndex == dataIndex) {
            return i;
       }
    }

Viewport部分:

//get selection model
selModel = this.loanGrid.getSelectionModel();

selModel.on({
    scope: this,
    rowselect: function (grid, rowIndex, keepExisting, record) {

        //get second icon in actioncolumn
        var icon = grid.grid.getColumnModel().getColumnById('action').items[1];

        //save context
        var self = this;

        //add handler by direct set
        icon.handler = function(grid, rowIndex, colIndex) {
            //open documents window
            self.documentsGridWindow.show();
        };
    }   
});

一切按预期工作!

相关问题