在项目中开发图表功能时用到了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 + '\n占比:' + params.percent + '%';
}
}
},
emphasis: {
label: {
formatter: function (params) {
return params.percent + '%';
}
}
}
}
}
]
},
isResize: true //是否根据窗口大小改变图表大小
});

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

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

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

    示例下载 插件名称命名为:jquery.tableresize.js,代码如下: /* Writen by mlcactus, 2014-11-24 这是我封装的一个jquery插件,能够使table ...

  2. Jquery 类似新浪微博,鼠标移到头像,用浮动窗口显示用户信息,已做成一个jquery插件

    请注意!!!!! 该插件demo PHP 的 demo下载  C#.NET的demo下载 需要如下图, 1.鼠标移动到头像DIV时,Ajax获取数据,并让浮动DIV显示出来. 2.鼠标可以移动到上面浮 ...

  3. 如何写一个jquery插件

      本文总结整理一下如何写一个jquery插件?虽然现今各种mvvm框架异常火爆,但是jquery这个陪伴我们成长,给我们带来很多帮助的优秀的库不应该被我们抛弃,写此文章,作为对以往欠下的笔记的补充, ...

  4. 你真的需要一个jQuery插件吗

    jQuery的插件提供了一个很好的方法,节省了时间和简化了开发,避免程序员从头开始编写每个组件.但是,插件也将一个不稳定因素引入代码中.一个好的插件节省了无数的开发时间,一个质量不好的插件会导致修复错 ...

  5. 如何去定义一个jquery插件

    扩展jquery的时候.最核心的方法是以下两种: $.extend(object) 可以理解为jquery添加一个静态方法 $.fn.extend(object) 可以理解为jquery实例添加一个方 ...

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

    引言 开发中,有好多地方用到联动菜单,以前每次遇到联动菜单的时候都去重新写,代码重用率很低,前几天又遇到联动菜单的问题,总结了下,发现可以开发一个联动菜单的功能,以后想用的时候就方便多了.项目中每个页 ...

  7. 自己实现一个jQuery插件

    <script src="https://cdn.staticfile.org/jquery/2.0.3/jquery.min.js"></script> ...

  8. 如何使用jQuery写一个jQuery插件

    jQuery插件其实是前端框架的思维,构成一个框架,个人认为必须满足以下几个基础条件:1. 可重用,2. 兼容性,3. 维护方便,虽说现在有很多比较成熟的前端框架,但是也有部分存在配置麻烦,学习成本大 ...

  9. 我的第一个jquery插件:下拉多选框

    <!DOCTYPE HTML> <html> <head> <title> New Document </title> <meta n ...

随机推荐

  1. FCKeditor

    FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.它志于轻量化,不需要太复杂的安装步骤即可使用.     它可和PHP.JavaScript.ASP.ASP.NET.Col ...

  2. Deppon接口开发

    一.1)  支持的传输协议  http ,暂时只支持HTTP协议进行通信. (2) 支持的数据传输格式  Json  ,所有接口暂只支持json消息格式. (3) 编码格式:UTF-8   交互编码格 ...

  3. 初探JS-html5移动端发送指定内容短信到指定号码

    原理:利用a标签跳转指定网址: sms://[号码]?body=[内容] //安卓 sms://[号码]&body=[内容] //IOS 首先简单的做两个input,一个用于输入内容,一个用于 ...

  4. 找出数组中特定和数字下标(JAVA)

    比如: 输入: numbers={2, 7, 11, 15}, target=9 输出: index1=1, index2=2 public class _003TwoSum { public sta ...

  5. 封装一些数据库SQLCipher的方法(增、删、改、查)

    上一篇随笔只是简单的说了一下使用SQLCipher框架,介绍的比较笼统,可能看一遍之后更加蒙圈了,为了更好的使用这个数据库,整理了我在公司项目的需要用的方法,包括创建表,插入数据,更新数据,搜索查询数 ...

  6. sql一些命令

    1.创建表 create table tSId ( tSid int identity(1,1) primary key, tSName varchar(10) check(len(tSName)&g ...

  7. H - Ones

    Description Given any integer 0 <= n <= 10000 not divisible by 2 or 5, some multiple of n is a ...

  8. WINFORM窗体里使用网页控件的一些办法

    最近弄一个项目,是个CS的.当然也是有表单之类的,如果将HTML表单搬到窗体上就省事多了. .首先要使用一个控件 WebBrowser 载入页面没使用URL属性,使用了下面这个属性 this.webB ...

  9. 流程控制 - PHP手册笔记

    脚本由语句构成,语句靠流程控制实现功能,这一节主要介绍了几个关键字的使用. elseif elseif和else if的行为完全一样,如果用冒号来定义if/elseif条件,那就不能用两个单词的els ...

  10. 国外大神Leo-G的 DevopsWiki

    https://raw.githubusercontent.com/Leo-G/DevopsWiki/master/README.md 总结的太好了,直接把md文件贴过来好了!慢慢学习!分享给大家,觉 ...