Extjs 4为什么隐藏所有可隐藏的列不允许?

时间:2012-11-27 18:11:15

标签: extjs hide gridpanel

我注意到用户无法隐藏网格面板中的所有列。似乎网格必须至少显示一列。我可以想象这是一个很好的功能,但是在处理可隐藏和不可隐藏的列时,它并不像我预期的那样工作。似乎规则是,即使网格中存在不可隐藏的列,也需要显示至少一个可隐藏的列。

当至少显示一个不可隐藏的列时,不允许隐藏所有可隐藏列是没有意义的。这种行为是否可配置?
我基于显示问题的有状态数组网格示例创建了一个演示:
http://jsfiddle.net/p9zqK/

var grid = Ext.create('Ext.grid.Panel', {
store: store,
stateful: true,
stateId: 'stateGrid',
columns: [
    {
        text     : 'Company',
        flex     : 1,
        sortable : false,
        hideable : false,
        dataIndex: 'company'
    },
    {
        text     : 'Price',
        width    : 75,
        sortable : true,
        renderer : 'usMoney',
        dataIndex: 'price'
    },
...

1 个答案:

答案 0 :(得分:1)

一个简单的黑客是允许无条件地隐藏所有列(在我的应用程序中,我不打扰检查是否存在可隐藏的列,因为我知道它们确实...)

Ext.override(Ext.grid.header.Container,
{
    updateMenuDisabledState: function()
    {
        var me = this,
        result = me.getLeafMenuItems(),
        total = result.checkedCount,
        items = result.items,
        len = items.length,
        i = 0,
        rootItem = me.getMenu().child('#columnItem');

        //if (total <= 1)
        if (total <= 0) /* Allow all columns to be hidden unconditionally */
        {
            me.disableMenuItems(rootItem, Ext.ComponentQuery.query('[checked=true]', items)[0]);
        }
        else
        {
            for (; i < len; ++i)
            {
                me.setMenuItemState(total, rootItem, items[i]);
            }
        }
    }
});