在项目中开发图表功能时用到了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. });

  

使用方法:

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

  

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

  1. var echars = new EcharsFun();
  2. echars.init({
  3. echartsInitDom: $('#issue-total-bar'),
  4. ajaxUrl:createIssueTotalPie.do, //ajax 提交路径(必选)
  5. ajaxParam: $('from').serializeObject(),
  6. option: {
  7. series: [
  8. {
  9. itemStyle: {
  10. normal: {
  11. label: {
  12. formatter: function (params) {
  13. return params.name + ':' + params.value + '\n占比:' + params.percent + '%';
  14. }
  15. }
  16. },
  17. emphasis: {
  18. label: {
  19. formatter: function (params) {
  20. return params.percent + '%';
  21. }
  22. }
  23. }
  24. }
  25. }
  26. ]
  27. },
  28. isResize: true //是否根据窗口大小改变图表大小
  29. });

结束:欢迎指出我文中的错误和不足,在此先行谢过了☆⌒(*^-゜)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. Android默认启动程序问题

    参考地址:http://www.cnblogs.com/Lewis/p/3316946.html 怎么让我们自己开发的Android程序设为默认启动呢?其实很简单,只要在AndroidManifest ...

  2. 使用Jquery UI 高仿百度搜索下拉列表功能

    最近项目有个需求,在新添加商户的时候,用户输入商户名称后,如果系统中有类似的商户名称,直接显示出来,如下图的效果: 实现这个功能,直接使用了JQuery UI 插件 目前我使用的实现版本是: 网友可以 ...

  3. ThinkPHP使用Memcached缓存数据

    ThinkPHP默认使用文件缓存数据,支持Memcache等其他缓存方式,有两个PHP扩展:Memcache和Memcached,Memcahe官方有说明,主要说一下Memcached. 相对于PHP ...

  4. .NET 下成熟开源的BPM产品四款推荐

    .net下的BPM产品相比JAVA的确实不多,这里主要提4款. 1.博客园.github.codeplex上的开源的流程组件AppInOne BPM,目前已有不少的企业开始使用. 优点:产品框架较全面 ...

  5. python 使用 tweepy 案例: PS4

    First, make sure Python and Tweepy installed well, and the network setup well. Then, you go to http: ...

  6. C#比较两个时间大小

    DateTime t1 = Convert.ToDateTime("2012-12-31 23:59:00");            DateTime t2 = Convert. ...

  7. HDU 2653 - Waiting ten thousand years for Love

    首先,对于一个 '@' 飞上去,飞下来都要耗1点魔力,所以是两点= = 然后站在同一格 魔力可能不同,所以要增加一维. 还有当前搜到的不一定是最小. 别的也没啥. #include <iostr ...

  8. HDU 2458 - Kindergarten

    有一堆男孩和女孩,男孩和男孩之间,女孩和女孩之间互相认识,给出一堆男孩女孩之间认识的关系, 问一个组里最多多少人相互都认识 那么 二分图里 将不认识的连线 那么 相互认识的人最多 就为 最大独立点集 ...

  9. eclipse ldt update resource

    http://download.eclipse.org/ldt/releases/milestones/ 百度一下都说是 http://download.eclipse.org/koneki/upda ...

  10. RemoteViews的内部机制

    1.RemoteViews的构造方法public RemoteViews(String packageName,int layoutId) 第一个表示当前应用的包名(反射机制需要),第二个表示加载的布 ...