• 关于ECharts Java类库的一个jquery插件


      在项目中开发图表功能时用到了Echars和一个关于Echars的java类库(http://git.oschina.net/free/ECharts)。这个类库主要目的是方便在Java中构造ECharts中可能用到的数据结构,即我们可以直接在后端构造好一个Option对象(java对象),将其转换为JSON字符串后返回给前端。但是在Echarts中的Option配置项中,通常需要配置一些函数类型的参数,在后端构造的Option对象只能以拼接字符串的方式在传递函数类型的参数,这样拼接不仅繁琐,而且通过使用java提供的一些Json工具包将后台构造的Option对象转换为json字符串时容易出现错误。所以我对Echars进行了简单的封装,如下代码:

    /*
     * Created by liubaozhe on 2016/7/20.
     */
    function EcharsFun(){
            this.cfg={
                echartsInitDom:null, //初始化DOM节点,jquery对象类型 (必选)
                ajaxUrl:null, //ajax 提交路径(必选)
                ajaxParam:{}, //ajax 参数(必选)
                ajaxSuccess:null, //ajax请求成功回调函数
                option :null,//option 对象参数
                isResize:true //是否根据窗口大小改变图表大小
            }
        }
    EcharsFun.prototype=$.extend({},{
            doAjax:function(){
                var that=this;
                $.ajax({
                    url: that.cfg.ajaxUrl,
                    type: "POST",
                    data:that.cfg.ajaxParam,
                    dataType :"json",
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        that.error(XMLHttpRequest, textStatus, errorThrown);
                    },
                    success: function(data){
                        that._success(data);
                    },
                    beforeSend: function() {//请求前回调函数
                        that.beforeSend();
                    },
                    complete:function(XMLHttpRequest, textStatus) { //请求完成回调函数
                        that.complete(XMLHttpRequest, textStatus);
                    }
                });
            },
            beforeSend:function(){
                var that=this;
                that._myChart.clear();
                that._myChart.showLoading({
                    text: '正在努力的读取数据中...'   //loading话术
                })
            },
            complete:function(){
                var that=this;
                that._myChart.hideLoading();
            },
            _success:function(data){
                var that=this;
                var option={};
                if(data && data.option){
                   option = $.parseJSON(data.option);
                }
                //如果option对象不为空,进行合并参数
                if(!$.isEmptyObject(option)) {
                    $.extend(true,option, that.cfg.option);  //合并option
                }
                //设置ajax回调函数
                that.cfg.ajaxSuccess && that.cfg.ajaxSuccess(data);
                //设置option
                that._myChart.setOption(option,true);
            },
            error:function (error) {
               console.error("图表请求数据失败!");
            },
            initEcharts:function() {
                var that = this;
                that._myChart = echarts.init(that.cfg.echartsInitDom[0]);
            },
            bindEvent:function(){ //绑定UI事件
                var that=this;
                if(that.cfg.isResize){
                    window.onresize = that._myChart.resize;
                }
            },
            init:function(cfg){
                var that=this;
                that._myChart=null;
                $.extend(that.cfg,cfg);
                that.initEcharts();
                that.doAjax();
                that.bindEvent();
            }
    });
    

      

    使用方法:

     var echars = new EcharsFun();
     echars.init({
                echartsInitDom: $('#issue-total-bar'),
                ajaxUrl:createIssueTotalPie.do, //ajax 提交路径(必选)
                ajaxParam: $('from').serializeObject(),
                isResize: true //是否根据窗口大小改变图表大小
     });
    

      

    如果需要配置函数参数,和正常配置Echarts 的option一样,这里的配置项优先级高,会覆盖后端生成的配置:

     var echars = new EcharsFun();
     echars.init({
                echartsInitDom: $('#issue-total-bar'),
                ajaxUrl:createIssueTotalPie.do, //ajax 提交路径(必选)
                ajaxParam: $('from').serializeObject(),
                option: {
                series: [
                    {
                        itemStyle: {
                            normal: {
                                label: {
                                    formatter: function (params) {
                                        return params.name + ':' + params.value + '
    占比:' + params.percent + '%';
                                    }
                                }
                            },
                            emphasis: {
                                label: {
                                    formatter: function (params) {
                                        return params.percent + '%';
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            isResize: true //是否根据窗口大小改变图表大小
     });
    

    结束:欢迎指出我文中的错误和不足,在此先行谢过了☆⌒(*^-゜)v

  • 相关阅读:
    python直接赋值、浅拷贝与深拷贝的区别解析
    join shuffle
    Python工作流-Airflow
    【JAVA基础语法】(一)Arrays.asList的使用
    Java中的数组和List
    ArrayList和LinkedList区别
    Array和ArrayList区别
    iOS项目崩溃日志采集与分析
    iOS超全开源框架、项目和学习资料汇总
    iOS webView、WKWebView、AFNetworking 中的cookie存取
  • 原文地址:https://www.cnblogs.com/liubaozhe/p/5679554.html
Copyright © 2020-2023  润新知