0

使用 extjs 4.1.1 我有一个包含很多列 > 20 的网格。

最初,这些列中的大多数都是隐藏的。

如果用户想要取消隐藏列,他们选择任何列上的菜单,然后选择“列”选项,这会展开另一个下拉/退出,显示所有列。显示旁边带有复选框的那些。

我的问题是:下拉列表中的列按它们在网格中定义/显示的顺序显示。选择它们在网格中的显示顺序是有充分理由的(例如,id 作为第一列)。但是,当用户想要显示其中一个隐藏列时,他们很难在列表中找到它。这是因为列表是按照定义列的顺序排序的。我想按字母顺序对列下拉/删除列表进行排序,而不影响网格中列的顺序。

这怎么能做到?

4

1 回答 1

2

我想我找到了您问题的解决方案。

首先,我没有 Ext JS 4.1.1。我当前 PC 上的框架。所以我试图找出你阅读 Ext JS 4.1.3 的问题。Sencha 网站上提供的文档。但我不认为他们在两个次要版本之间的框架的这一部分进行了重大更改,因此我的解决方案也应该适用于您的情况。我已经使用 JSFiddle 尝试了我的解决方案。不幸的是,他们没有 4.1.1。ext-all.css 文件,所以我手动链接了 Sencha 提供的 4.0.2 文件,所以菜单看起来有点错位。

标题菜单及其子菜单由 Ext.grid.header.Container 类管理。列子菜单由getColumnMenu方法构造。每次拖放或其他应该影响网格视图的事件都会清除和重建整个菜单。因此,为了解决问题,覆盖此方法就足够了。因为headercontainer类在框架中太深了,很难扩展它,所以你必须使用Ext.base.override方法。

列子菜单的菜单项是根据

   items = headerContainer.query('>gridcolumn[hideable]')

询问。因此,在创建菜单项之前,您必须首先按字母顺序对结果进行排序。我已经在类中添加了 sortColumns 方法,它可以完成所有的排序工作。

所以这就是我所做的:链接到我的解决方案

我希望这就是你要找的。

于 2012-12-28T23:21:17.567 回答