当前位置:编程学习 > JAVA >>

Ext图表的动态生成

根据公司的规划,要实现一个自定义的查询组件,其中包括了自定义图表,基本要求是:
 
1、  图表可以自定义,定义完成后保存到数据库中
 
2、  根据保存到数据库的图表定义正确的展现出图表,包括样式、轴、序列、查询条件、查询按钮等。
 
3、  数据源通过配置获取,再根据数据源,查询出数据(可能不在同一个数据库中)。
 
 
 
这里不关心图表定义、数据来源和图表展现时的查询条件与查询按钮等,只关注如何用Ext正确展现自定义图表的部分。
 
经过查看ext文档、探索、尝试,知道Ext的图表主要包括四个问题:图表本身(主要是样式)、轴、序列和store,而且轴、序列和store的设置要匹配(主要是字段要匹配)。
 
 
 
现在可以开始创建图表了,创建图表之前要先创建出来轴、序列和store(没有顺序):
 
创建轴:
 
[javascript]  
createAxes:function(axisRecords){  
    var axes = [];  
    var axis;  
    for(var idx = 0; idx<axisRecords.length;idx++)  
    {  
        var gridStr = axisRecords[idx].get('grid');  
        var grid  = gridStr==""?false:Ext.JSON.decode(gridStr);  
        var labelStr = axisRecords[idx].get('label');  
        var label = labelStr==''?"":Ext.JSON.decode(labelStr);  
        var axisField = axisRecords[idx].get('fields');  
        axis = {  
            type: axisRecords[idx].get('axisType'),  
            position: axisRecords[idx].get('position'),  
            fields: axisField,  
            title: axisRecords[idx].get('title'),  
            dashSize:axisRecords[idx].get('dashSize'),  
            label : label,  
            grid : grid  
        };  
        axes.push(axis);  
    }  
    return axes;  
}  
创建序列:
 
[javascript] 
createSeries:function(seriesRecords){  
    var series = [];  
    var ser, labelStr, label, tipStr, tips, sourceName, xfield;  
    var fField ;  
    for(var idx=0;idx<seriesRecords.length;idx++){  
        fField = seriesRecords[idx].get('yField');  
        labelStr = seriesRecords[idx].get('label');  
        label = labelStr==''?"":Ext.JSON.decode(labelStr);  
        tipStr = seriesRecords[idx].get('tips');  
        tips = tipStr==''?'':Ext.JSON.decode(tipStr);  
        sourceName = seriesRecords[idx].get('sourceName');  
        xfield = seriesRecords[idx].get('xField');  
        xfield = xfield==null ? '' : xfield.toUpperCase();  
        ser = {              
            type: seriesRecords[idx].get('seriesType'),  
            axis: seriesRecords[idx].get('axis'),  
            highlight: true,  
            title : sourceName,  
            tips : tips,  
            showMarkers:true,  
            markerConfig:{  
                color: '#F00'  
            },  
            fill:seriesRecords[idx].get('fill'),  
            showInLegend : seriesRecords[idx].get('showLegend'),  
            stacked: seriesRecords[idx].get('stacked'),  
            xField: xfield,  
            yField: fField,  
            angleField: fField  
        };  
        if(label)  
            ser.label = label;  
        series.push(ser);  
    }  
    return series;  
}  
由代码可以看出,每个轴或序列都是一个json格式的对象,全部轴或序列就一个数组。
 
创建store:
 
[javascript]  
createChartStore:function(){  
    var seriesRecords = Ext.getStore('ChartSeries').getRange();  
    var axisRecords = Ext.getStore('ChartAxes').getRange();  
    var fieldArr = [];  
    var idx, fields;  
    // 根据轴和序列得到要store应该包括哪些内容  
    for(idx = 0;idx<axisRecords.length;idx++){  
        fields = axisRecords[idx].get('fields');  
        if(fields != null)  
            fieldArr = Ext.Array.merge( fieldArr, fields.toUpperCase().split(','));  
    }  
    for(idx = 0;idx<seriesRecords.length;idx++){  
        fields = seriesRecords[idx].get('xField');  
        if(fields != null)  
            fieldArr = Ext.Array.merge( fieldArr,fields.toUpperCase().split(','));  
        fields = seriesRecords[idx].get('yField');  
        if(fields != null)  
            fieldArr = Ext.Array.merge( fieldArr,fields.toUpperCase().split(','));  
    }  
      
// 创建store  
    var store = Ext.create('Ext.data.Store', {  
        //pageSize :pageSize,  
        fields:fieldArr,  
        proxy: {  
            type : 'ajax',  
            url : '/hummer/application/controller/run/FindChartData.action',  
      &nb
补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,