根据后台传的数据动态生成grid的列和store的注意事项

1、不要在该grid的initComponent方法里去请求后台得到动态显示的列,因为callParent()方法会先于你的请求后台的代码执行,所以当调用父类方法的时候你的columns和store都还没创建好,这个时候会有错。

     应该在创建该grid的时候将该grid的方法放到请求后台参数的方法里,然后在initComponent里得到该请求返回的数据封装columns和store,这样保证在调用父类方法前就完成了columns和store的创建。

    例如创建的grid的类名叫做:Ext.app.wris.rain.RtuResultListPanel,我要在点击按钮的时候创建该grid。那么调用代码如下:
listeners: { click:{ fn: function(obj, e, op){ if(!res) { rainController.searchTimeColumnRain(12, function(result, e) { if(e.status) { res = result; var resultPanel = Ext.create('Ext.app.wris.rain.RtuResultListPanel'); } }); } } } }

其中 rainController.searchTimeColumnRain是后台对应的方法,res是定义的一个全局变量。要是能有办法不定义全局变量就能在Ext.app.wris.rain.RtuResultListPanel的initComponent方法里调用就好了,还没想到。

 

2.封装columns和store的fields不要死拼字符串,应该这样写:

var columns = []; var col = {}; var fields = []; var field = {}; for(var i = 0; i < res.length; i++) { var type=''; if("int" == res[i].columnType || "float" == res[i].columnType) { type = 'number'; }else { type = 'string'; } col = { text: res[i].columnDisName, dataIndex: res[i].columnName }; columns.push(col); if(type == '') { type = 'auto'; } field = { name: res[i].columnName, type: type }; fields.push(field); }

 columns 就是列模型的集合,col 是每个列

你可能感兴趣的:(function,String,float)