在extjs中创建一个动态网格

时间:2012-04-11 09:19:11

标签: dynamic extjs grid

我需要在ExtJS中创建一个动态gridpanel。我使用actioncolumn

handler: function(view, rowIndex, colIndex, item, e) {
    var tabs = Ext.getCmp('northPanel');
    var rec = view.getStore().getAt(rowIndex);

    modelFactory(rec.get('Reference'), rec.get('ResultFields'));

    console.log(rec.get('ResultFields'));
    console.log('start adding tab');
    tabs.add({
        title: 'Report: ' + rec.get('Reference'),
        closable: true,
        dockedItems: [{
            xtype: 'toolbar',
            dock: 'top',
            items: [{
                xtype: 'tbfill'
            }, {
                xtype: 'button',
                text: 'Export report'
            }, {
                xtype: 'button',
                text: 'Refresh data'
            }]
        }],
        xtype: 'tabpanel',
        items: [{
            xtype: 'gridpanel',
            title: 'Gridview',
            forceFit: true,
            store: ND.store,
            columns: []
        }]
    });

    console.log('tab created');
},

现在我需要为这个网格创建列。我需要制作的列位于rec.get('ResultFields')。当我使用console.log()时,我在萤火虫中看到了这一点:

[Object {
    name = "currentSimAllocationByCcu", type = "textfield", format = null
}, Object {
    name = "wanNumber", type = "textfield", format = null
}, Object {
    name = "carrierName", type = "textfield", format = null
}, Object {
    name = "dataPackageName", type = "textfield", format = null
}, Object {
    name = "simIccid", type = "textfield", format = null
}, Object {
    name = "expiryTime", type = "textfield", format = null
}, Object {
    name = "bytesRx", type = "textfield", format = null
}, Object {
    name = "bytesTx", type = "textfield", format = null
}]

如何使用此列创建列?

1 个答案:

答案 0 :(得分:1)

什么似乎有问题?

如果在创建网格之前获得有关列的信息,则根据字段数组创建数组或列。像这样:

var _cols = [],
    _flds = rec.get('ResultFields');

Ext.Array.each(_flds, function(f) {
   _cols.push(Ext.create('Ext.grid.column.Column', {
      text: f.get('name'),
      dataIndex: f.get('name')
   }));
});

然后在创建网格时使用_cols