在 ExtJS 中加载网格时隐藏所有列

问题描述

我正在使用 ExtJS 5 并试图隐藏扩展 Ext.Component 的内部定义网格的列。我先解释一下这背后的动机。

问题是,在加载网格时,列会显示,但在加载后消失。这会导致加载完成并最终呈现网格后 UI 出现一些不一致(一种列消失的故障)。

请注意,列是指加载网格时空列的标题(列仅在加载后填充)。另外,网格加载是指不渲染网格数据的阶段,网格内容空间只显示一个微调器。

显示或隐藏两列的逻辑包含在 beforerenderlisteners 中:

beforerender: async function() {
                        // some async call to determine a global boolean flag for whether the two columns will be hidden or not; by default the two columns are showing
                    },

由于某种原因,列本身的呈现(取决于 beforerender 内的异步调用设置的全局布尔标志)不满足等待对 FINISH 的异步调用的预期行为具有适当的全局布尔标志以显示不显示

因此不一致:列会在加载时首先显示(这是因为列的呈现不等待异步获得的布尔标志)但随后列将被隐藏(这是确定后的预期行为)布尔标志)。

经过一番挖掘,我认为一个潜在的解决方案是在加载过程中隐藏网格列标题本身,这样不一致性是不可见的(用户看不到最初出现的两列然后消失,如果他们根本不加载时首先看到初始列)。

关于如何在加载网格时隐藏列的任何建议或线索?我环顾四周,发现 loadMask 可能是一个潜在的路径,但我不太确定如何实现它。

解决方法

我相信通过绑定可以很容易地做到这一点。

如果你的viewmodel中定义了store,你可以将store的loading属性绑定到grid的hidden属性上。

这是一个显示如何隐藏一列的小提琴。框架版本是 6.5,但在 5.X 上应该不会有太大差异。如果 {gridStore.loading} 绑定不起作用,您可以在存储加载前后在 VM 上设置自定义标志。并将隐藏的属性绑定到那个。

https://fiddle.sencha.com/#view/editor&fiddle/3f2j

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...