【问题标题】:ExtJS setting menuDisabled dynamically in gridExtJS 设置 menuDisabled 在网格中动态禁用
【发布时间】:2017-07-18 08:41:54
【问题描述】:

尝试删除包含动态排序的列标题菜单。 在每一列的 afterrender 事件上设置menuDisabled = false

Ext.each(view.getColumns(), function (item) {
     item.menuDisabled = true;
     // item.sortable = false; //this works perfectly
});

如果我尝试将 sortable 设置为 false 而不是 menuDisabled,则效果很好。

【问题讨论】:

    标签: javascript extjs extjs6


    【解决方案1】:

    是的,menuDisabled 是在列渲染时考虑的配置,之后更改它毫无价值。但是切换列菜单有一个棘手的方法,只有在将 menuDisabled 设置为 false 的情况下呈现列时才会起作用

    因此,如果深入研究列类源代码,我们会看到在 renderTpl 配置中有以下代码:

    '<tpl if="!menuDisabled">',
        '<div id="{id}-triggerEl" data-ref="triggerEl" role="presentation" unselectable="on" class="',
        Ext.baseCSSPrefix, 'column-header-trigger', '{childElCls}" style="{triggerStyle}"></div>',
    '</tpl>',
    

    它会渲染一个 div 来切换菜单。因此,通过切换此 div 的可见性,您将切换 menuDisabled “状态”。

    column.triggerEl.show();
    column.triggerEl.hide();
    

    在您的情况下,您可以禁用显示所有列的菜单,如下所示:

    Ext.each(view.getColumns(), function(item) {
        item.triggerEl.hide();
    });
    

    这是一个有效的小提琴:https://fiddle.sencha.com/#view/editor&fiddle/1r2h

    【讨论】:

      【解决方案2】:

      这是因为在 afterrender 时菜单已经创建,并且设置属性不会禁用它出现,您应该在初始化时尝试它,或者像您已经禁用列的排序一样。

      【讨论】:

      • 谢谢@Mr.Bruno。我已将函数从 afterrender 事件移动到 beforerender 并且它运行良好。
      • @GrumpyTurtle 如果答案有效,请将我的答案标记为正确
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      相关资源
      最近更新 更多