ExtJS 3 DataGrid:如何使标题菜单中的最后一个选中项无效

时间:2012-07-11 10:33:02

标签: javascript extjs extjs3

SUBJ。

在我的情况下,我可以删除所有复选框 - 这是错误的。它应该像Sencha GXT CheckBox网格:http://i.stack.imgur.com/rhRCr.png

描述: 1)渲染Datagrid 2)点击排序菜单,选择"列" 3)以任何顺序隐藏一些列(例如,5个中的4个) 4)最后一个菜单项应该像屏幕截图一样处于非活动状态。

最后一个 - 我的意思是它不是具有id =(colCount - 1)的项目。

1 个答案:

答案 0 :(得分:1)

GridView 负责处理标题菜单,其中包括菜单。但是GridView没有你要求的行为。

要完成此行为,您应该实现它。

正如我上面提到的,菜单由视图控制,如果你检查文档和源代码,你会发现该视图有一个名为colMenu的属性,它指向列显示/隐藏菜单。你可以听它的事件来实现这种行为。

这里我是如何完成这种行为的:

...
// we need to wait until the grid is rendered, because colMenu doesn't exist
// until the grid and its view is rendered.
grid.on( 'afterrender', function() {

    this.view.colMenu.on( 'itemclick', function( item, e ){

        // active will contain visible columns
        var active = [], i;

        // iterate through all menu items to find checked ones
        for ( i = 0; i < this.items.items.length, i++ ) {
            if ( this.items.items[ i ].checked ) active.push( this.items.items[ i ] );
        };

        // if there is only one active one, disable it
        if ( active.length == 1 ) {
            active[ 0 ].disable();

        // if there is more then one, enable the disabled ones
        } else if ( active.length > 0 ) {
            for( i = 0; i < active.length; i++ ) {
                if ( active[ i ].disabled ) active[ i ].enable();
            }
        }

    // buffer is important for our itemclick event listener.
    // it'll wait 100ms after default itemclick event to finish its job.
    }, this.view.colMenu, { buffer : 100 } );
} );