Extjs网格限制列显示/隐藏检查

时间:2016-08-23 09:01:03

标签: javascript extjs

我想限制用户检查/取消选中网格中的列。这是一个默认的Picasso.with(context).load(uri).error(R.drawable.default_image).into(imageview); 网格,我希望将extjs事件或配置上的内容应用于列菜单beforeselect。因此,如果选择了max allowed columns并且用户尝试检查更多列,则会弹出错误消息。

请提前指导我。

1 个答案:

答案 0 :(得分:0)

我不会做那个错误消息的东西,因为错误消息让用户烦恼。当达到最大值时,我会在columnshow事件中禁用未经检查的列,如下所示:

  var doCheckItems = function() {
          var showncolumns = Ext.Array.sum(grid.headerCt.query("gridcolumn").map(function(column) {return column.isVisible()?1:0;}));
          if(showncolumns >= 5) {
              Ext.each(grid.headerCt.getMenu().query("menucheckitem"),function(item) {
                  if(!item.checked) item.disable();
              })
          } else {
              Ext.each(grid.headerCt.getMenu().query("menucheckitem"),function(item) {
                  item.enable();
              })
          }
      };

  grid.headerCt.on('columnshow',doCheckItems);
  grid.headerCt.on('columnhide',doCheckItems);

https://fiddle.sencha.com/#fiddle/1fkj

但如果您仍然想要,可以绑定beforecheckchange上的menucheckitems事件:

var doCheckChange = function() {
    var showncolumns = Ext.Array.sum(grid.headerCt.query("gridcolumn").map(function(column) {return column.isVisible()?1:0;}));
    if(showncolumns >= 5) {
        Ext.Msg.alert('Error','Too many columns checked');
        return false;
    }
};
Ext.each(grid.headerCt.getMenu().query("menucheckitem"),function(item) {
    item.on('beforecheckchange', doCheckChange);
});

https://fiddle.sencha.com/#fiddle/1fkl