关于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进行了简单的封装,如下代码:

 1 /**
 2  * Created by liubaozhe on 2016/7/20.
 3  */
 4 function EcharsFun(){
 5         this.cfg={
 6             echartsInitDom:null, //初始化DOM节点,jquery对象类型 (必选)
 7             ajaxUrl:null, //ajax 提交路径(必选)
 8             ajaxParam:{}, //ajax 参数(必选)
 9             ajaxSuccess:null, //ajax请求成功回调函数
10             option :null,//option 对象参数
11             isResize:true //是否根据窗口大小改变图表大小
12         }
13     }
14 EcharsFun.prototype=$.extend({},{
15         doAjax:function(){
16             var that=this;
17             $.ajax({
18                 url: that.cfg.ajaxUrl,
19                 type: "POST",
20                 data:that.cfg.ajaxParam,
21                 dataType :"json",
22                 error: function(XMLHttpRequest, textStatus, errorThrown) {
23                     that.error(XMLHttpRequest, textStatus, errorThrown);
24                 },
25                 success: function(data){
26                     that._success(data);
27                 },
28                 beforeSend: function() {//请求前回调函数
29                     that.beforeSend();
30                 },
31                 complete:function(XMLHttpRequest, textStatus) { //请求完成回调函数
32                     that.complete(XMLHttpRequest, textStatus);
33                 }
34             });
35         },
36         beforeSend:function(){
37             var that=this;
38             that._myChart.clear();
39             that._myChart.showLoading({
40                 text: ‘正在努力的读取数据中...‘   //loading话术
41             })
42         },
43         complete:function(){
44             var that=this;
45             that._myChart.hideLoading();
46         },
47         _success:function(data){
48             var that=this;
49             var option={};
50             if(data && data.option){
51                option = $.parseJSON(data.option);
52             }
53             //如果option对象不为空,进行合并参数
54             if(!$.isEmptyObject(option)) {
55                 $.extend(true,option, that.cfg.option);  //合并option
56             }
57             //设置ajax回调函数
58             that.cfg.ajaxSuccess && that.cfg.ajaxSuccess(data);
59             //设置option
60             that._myChart.setOption(option,true);
61         },
62         error:function (error) {
63            console.error("图表请求数据失败!");
64         },
65         initEcharts:function() {
66             var that = this;
67             that._myChart = echarts.init(that.cfg.echartsInitDom[0]);
68         },
69         bindEvent:function(){ //绑定UI事件
70             var that=this;
71             if(that.cfg.isResize){
72                 window.onresize = that._myChart.resize;
73             }
74         },
75         init:function(cfg){
76             var that=this;
77             that._myChart=null;
78             $.extend(that.cfg,cfg);
79             that.initEcharts();
80             that.doAjax();
81             that.bindEvent();
82         }
83 });

使用方法:

 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 + ‘\n占比:‘ + params.percent + ‘%‘;
                                }
                            }
                        },
                        emphasis: {
                            label: {
                                formatter: function (params) {
                                    return params.percent + ‘%‘;
                                }
                            }
                        }
                    }
                }
            ]
        },
        isResize: true //是否根据窗口大小改变图表大小
 });

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

时间: 2024-10-09 22:57:42

关于ECharts Java类库一个jquery插件的相关文章

分享一个jquery插件,弥补一下hover事件的小小不足

hover事件有一个缺点:当你的鼠标无意划过一个dom元素(瞬间划过,这个时候用户可能不想触发hover事件),会触发hover事件 应该设置一个时差来控制hover事件的触发 比如jd左边的菜单 你用鼠标瞬间划过他子菜单会弹出然后立即消失, 用户体验非常的不好. 易迅的菜单就没有这个问题 delayHover来解决这个问题 啥也不说了先看调用---------- 调用方式: var duration = 500;// 延迟500毫秒 $('#div1').delayHover(function

你真的需要一个jQuery插件吗

jQuery的插件提供了一个很好的方法,节省了时间和简化了开发,避免程序员从头开始编写每个组件.但是,插件也将一个不稳定因素引入代码中.一个好的插件节省了无数的开发时间,一个质量不好的插件会导致修复错误的时间比实际从头 开始编写组件的时间还长. 幸运的是,人们通常具有各种不同的插件可供选择.但是,即使你只用一个,也要弄清楚它是否值得使用的.永远不要在你的代码库中引入错误的代码. 你需要一个插件吗? 首先是要弄清楚究竟你是否需要一个插件.如果不需要,既可以节省文件大小,又可以节省自己的时间. 1.

如何开发一个Jquery插件?

最近有离职的想法,可这不是重点,重点是很多面试官都会问的一个问题就是:怎么开发一个jquery插件. 其实,如果是在真实的工作中遇到这种情况,我会直接找一个简单的jquery插件,例如jquery.cookie.js或者jquery.textchange.js插件,jquery的插件那么多,你随便找来一个都是可以用的,我们需要做的就是把jquery的架子留下来,把具体的功能实现换成自己的,然后就可以到处去使用了. 但是,面试中我们是万万不能这么回答的,所以,一方面是为了让自己再熟悉一下jquer

做了一个jquery插件,使表格的标题列可左右拉伸

示例下载 插件名称命名为:jquery.tableresize.js,代码如下: /* Writen by mlcactus, 2014-11-24 这是我封装的一个jquery插件,能够使table的各列可以左右拉伸,从而使宽度变小或变大 用法: 单个table:$("#table_id").tableresize(); 页面所有table:$("table").tableresize(); */ (function ($) { $.fn.tableresize

如何去定义一个jquery插件

扩展jquery的时候.最核心的方法是以下两种: $.extend(object) 可以理解为jquery添加一个静态方法 $.fn.extend(object) 可以理解为jquery实例添加一个方法 $.extend(object) 例子: 1 2 3 4 5 6 7 /* $.extend 定义与调用 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ $.extend({ f

开发一个jQuery插件——多级联动菜单

引言 开发中,有好多地方用到联动菜单,以前每次遇到联动菜单的时候都去重新写,代码重用率很低,前几天又遇到联动菜单的问题,总结了下,发现可以开发一个联动菜单的功能,以后想用的时候就方便多了.项目中每个页面都有引用jQuery,,开发个jQuery联动菜单插件,说动手就动手,下面跟大家分享分享. 我用的jQuery插件方式 (function($){ $.fn.casmenu=function(argvs){ //your code } })(jQuery); 其中jQuery传入的是jquery对

个人第一个jquery插件(tips)

js代码 /** * Created by joesbell on 2016/10/8. */ ;(function($) { var defaults = { background:"#000",//tips的背景颜色 color:"white", position:"r",//出现的位置 l--左边, r--右边 t--顶部 b--底部 parWidth:"",//父级元素的宽度 parHeight:""

写的第一个jQuery插件----缓冲运动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

自己在项目中写的一个Jquery插件和Jquery tab 功能

后台查询结果 PDFSearchResult实体类: [DataContract(Name = "PDFSearchResult")] public class PDFSearchResult { public PDFSearchResult(string title, string fileUrl) { Title = title; FileUrl = fileUrl; } [DataMember(Name = "title")] public string Ti