Ext JS グリッドで「展開/折りたたみ」列の効果を作成しようとしています。これを行うには、列の名前の横にアイコン/ボタンを追加して、誰かがクリックすると子列が非表示または表示されるようにします。
グリッドをどのように動作させたいかを示すフィドルを作成しました(コードも下に貼り付けられています):http://jsfiddle.net/a1umupea/
私のソリューションでは、グリッドを操作する JavaScript 関数を呼び出すリンクを作成しました。
別の JavaScript 関数を記述するのではなく、Ext JS 4.2 を使用してこれを達成するためのより良い方法はありますか?
Ext.onReady(function () {
Ext.create('Ext.data.Store', {
storeId: 'fruitStore',
fields: ['name', 'Total', 'Apple', 'Banana', 'Orange'],
data: {
'items': [{
'name': 'Lisa',
"Total": "5",
"Apple": "3",
"Banana": "1",
"Orange": "1"
}, {
'name': 'Bart',
"Total": "10",
"Apple": "5",
"Banana": "2",
"Orange": "3"
}, {
'name': 'Homer',
"Total": "15",
"Apple": "5",
"Banana": "5",
"Orange": "5"
}, {
'name': 'Marge',
"Total": "15",
"Apple": "10",
"Banana": "3",
"Orange": "2"
}]
},
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'items'
}
}
});
Ext.create('Ext.grid.Panel', {
title: 'Fruits',
id: 'fruitGrid',
layout:'fit',
store: Ext.data.StoreManager.lookup('fruitStore'),
columns: [{
text: 'Name',
dataIndex: 'name'
}, {
text: '<a href="#" onclick="toggle(this)">[+]</a> Fruits',
columns:[
{
text: 'Total',
dataIndex: 'Total'
},
{
text: 'Apple',
dataIndex: 'Apple',
hidden:true
},
{
text: 'Banana',
dataIndex: 'Banana',
hidden:true
},
{
text: 'Orange',
dataIndex: 'Orange',
hidden:true
}
]
}
],
height: 300,
width: 500,
renderTo: Ext.getBody()
});
});
function toggle(t){
var grid = Ext.getCmp('fruitGrid');
console.log(grid);
for(var i = 0 ; i < grid.headerCt.gridDataColumns.length ; i++){
var col = grid.headerCt.gridDataColumns[i];
if (col.text == 'Apple' || col.text=='Banana' || col.text=='Orange'){
if(col.isVisible()) col.setVisible(false);
else col.setVisible(true);
}
}
if(t.text.indexOf('+') != -1){
t.text=t.text.replace('+','-');
}
else
t.text=t.text.replace('-','+');
}