0

extjs 4.1.1を使用すると、20を超える列がたくさんあるグリッドがあります。

最初は、これらの列のほとんどが非表示になっています。

ユーザーが列を再表示したい場合は、任意の列のメニューを選択してから、[列]の選択肢を選択します。これにより、すべての列を表示する別のドロップダウン/ドロップアウトが展開されます。横にチェックボックスが付いているものが表示されます。

私の問題はこれです:ドロップダウンの列は、グリッドで定義/表示されている順序で表示されます。グリッドに表示される順序は、正当な理由で選択されています(たとえば、最初の列としてid)。ただし、ユーザーが非表示の列の1つを表示したい場合、リストでそれを見つけるのは困難です。これは、リストが列が定義されている順序でソートされているためです。グリッド内の列の順序に影響を与えずに、列のドロップダウン/ドロップアウトリストをアルファベット順に並べ替えたい。

これはどのように行うことができますか?

4

1 に答える 1

2

私はあなたの質問に対する解決策を見つけたと思います。

まず第一に、私はExtJS4.1.1を持っていません。私の現在のPCのフレームワーク。だから私はあなたがExtJS4.1.3を読むのに問題があることを理解しようとしました。Senchaのサイトで入手可能なドキュメント。しかし、2つのマイナーリリースの間でフレームワークのこの部分に大幅な変更が加えられたとは思わないので、私のソリューションはあなたの場合にも機能するはずです。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 に答える