助けてください!ExtJs4.1グリッドパネルを使用しています。
レンダリング後にグリッドのenableColumnHideプロパティを変更する方法を探しています。いくつかの画面で同じグリッドを再利用しますが、主に一部の列を非表示にします。
それらの画面の1つでは、非表示にできない列だけが残っているので、列ヘッダーメニューからオプションを完全に削除したいのですが、他の画面の1つに到達したら元に戻します。
何か案は?
助けてください!ExtJs4.1グリッドパネルを使用しています。
レンダリング後にグリッドのenableColumnHideプロパティを変更する方法を探しています。いくつかの画面で同じグリッドを再利用しますが、主に一部の列を非表示にします。
それらの画面の1つでは、非表示にできない列だけが残っているので、列ヘッダーメニューからオプションを完全に削除したいのですが、他の画面の1つに到達したら元に戻します。
何か案は?
私も以前に同様の問題を抱えていました。ここで私の回避策を確認できます:
Extjsグリッドパネル-hideable=falseで列を非表示にします
基本的に、グリッドヘッダーメニューの「beforeshow」イベントに登録し、各列の「非表示」プロパティに従って、メニューの各非表示列のチェックボックス項目を非表示にしました。
「enableColumnHide」でも同じことができます(メニュー項目自体のみである「Columns」サブメニューを非表示にするだけです)
それを行う明確な方法はないようですが、私はハックを見つけました-その値を変更するたびに、ヘッダーメニューを変更enableColumnHide
して破棄します。headerCt
コード例:
var checkbox = new Ext.form.field.Checkbox({
renderTo: 'checkbox',
boxLabel: 'enableColumnHide',
checked: true,
handler: function(sender, checked) {
var h = grid.headerCt;
h.enableColumnHide = checked;
if (h.menu) {
h.menu.destroy();
h.menu = null;
}
}
});
列に非表示を使用することによっても可能です。
var checkbox = new Ext.form.field.Checkbox({
renderTo: 'checkbox',
boxLabel: 'enableColumnHide',
checked: true,
handler: function(sender, checked) {
Ext.each(grid.columns, function(c){
c.hideable = checked;
});
}
});
作業サンプルenableColumnHide
: http: //jsfiddle.net/M3Aqq/5/
作業サンプルhideable
: http: //jsfiddle.net/M3Aqq/9/