ZP的EXTJS学习笔记(四)——图表的简单使用(图表点击事件)

这次做的比较简单,是一个消息阅读情况的展示。

是模仿Example中chart的pie.js做的。

贴下改造后的pie.js:

Ext.require(‘Ext.chart.*‘);
Ext.require([‘Ext.layout.container.Fit‘, ‘Ext.window.MessageBox‘]);

Ext.onReady(function () {
    //store1.loadData(generateData(6, 20));

    var donut = false,
        chart = Ext.create(‘Ext.chart.Chart‘, {
            xtype: ‘chart‘,
            animate: true,
            id: ‘domid‘,
            store: store1,
            shadow: true,
            legend: {
                position: ‘right‘
            },
            insetPadding: 60,
            theme: ‘Base:gradients‘,
            /*listeners: {
                click: {
                    element: Ext.get(‘domid‘), //bind to the underlying el property on the panel
                    fn: function(o) {
                        //alert(o.index);
                        var items = chart.series.get(0).items, i;
                        alert(items[1].storeItem.get(‘name‘));
                    }
                }
            },*/
            series: [{
                type: ‘pie‘,
                field: ‘data1‘,
                showInLegend: true,
                donut: donut,
                listeners : {
                    itemclick : function(o) {
                        if(o.index == 1){
                            var noReadStore  = Ext.create(‘Ext.data.Store‘, {
                                fields: [‘id‘, ‘name‘],
                                proxy: {
                                    type: ‘ajax‘,
                                    api: {
                                        read: ‘../mail/getNoReadMember.dhtml‘
                                    },
                                    reader: {
                                           type: ‘json‘,
                                        root: ‘members‘
                                    }
                                }
                            });
                            noReadStore.load();
                            var noReadGrid =  Ext.create(‘Ext.grid.Panel‘, {
                                border: false,
                                store: noReadStore,
                                columns: [{//实现图标
                                            header : ‘name‘,
                                            dataIndex : ‘name‘,
                                            flex: 1
                                }],
                                emptyText: ‘无未读人员。‘
                            });
                            Ext.create(‘Ext.Window‘, {
                                title: ‘未读人员名单‘,
                                    width: 180,
                                height: 400,
                                x: 100,
                                y: 80,
                                plain: true,
                                headerPosition: ‘top‘,
                                layout: ‘fit‘,
                                items: noReadGrid
                            }).show();
                        }else if(o.index == 0){
                            var readStore  = Ext.create(‘Ext.data.Store‘, {
                                fields: [‘id‘, ‘name‘],
                                proxy: {
                                    type: ‘ajax‘,
                                    api: {
                                        read: ‘../mail/getReadMember.dhtml‘
                                    },
                                    reader: {
                                           type: ‘json‘,
                                        root: ‘members‘
                                    }
                                }
                            });
                            readStore.load();
                            var readGrid =  Ext.create(‘Ext.grid.Panel‘, {
                                border: false,
                                store: readStore,
                                columns: [{//实现图标
                                            header : ‘name‘,
                                            dataIndex : ‘name‘,
                                            flex: 1
                                }],
                                emptyText: ‘无已读人员。‘
                            });
                            Ext.create(‘Ext.Window‘, {
                                title: ‘已读人员名单‘,
                                    width: 180,
                                height: 400,
                                x: 430,
                                y: 80,
                                plain: true,
                                headerPosition: ‘top‘,
                                layout: ‘fit‘,
                                items: readGrid
                            }).show();
                        }
                    }
                },
                tips: {
                  trackMouse: true,
                  width: 140,
                  height: 28,
                  renderer: function(storeItem, item) {
                    //calculate percentage.
                    var total = 0;
                    store1.each(function(rec) {
                        total += rec.get(‘data1‘);
                    });
                    this.setTitle(storeItem.get(‘name‘) + ‘: ‘ + Math.round(storeItem.get(‘data1‘) / total * 100) + ‘%‘);
                  }
                },
                highlight: {
                  segment: {
                    margin: 20
                  }
                },
                label: {
                    field: ‘name‘,
                    display: ‘rotate‘,
                    contrast: true,
                    font: ‘18px Arial‘
                }
            }]
        });

    var panel1 = Ext.create(‘widget.panel‘, {
        autoWidth: true,
        height: 500,
        title: ‘详细阅读情况‘,
        renderTo: Ext.getBody(),
        layout: ‘fit‘,
        tbar: [{
            text: ‘保存图表‘,
            handler: function() {
                Ext.MessageBox.confirm(‘确定下载‘, ‘您想将该图表保存为图片么?‘, function(choice){
                    if(choice == ‘yes‘){
                        chart.save({
                            type: ‘image/png‘
                        });
                    }
                });
            }
        }, {
            text: ‘刷新‘,
            handler: function() {
                // Add a short delay to prevent fast sequential clicks
                window.loadTask.delay(100, function() {
                    store1.reload();
                });
            }
        }, {
            enableToggle: true,
            pressed: false,
            text: ‘圆环图‘,
            toggleHandler: function(btn, pressed) {
                chart.series.first().donut = pressed ? 35 : false;
                chart.refresh();
            }
        }],
        items: chart
    });
});

使用基本如上,说下点击图表元素事件的使用。

开始写在chart中,找不到点击区域的表示,之后添加在series中,通过返回参数o.index即可获得点击区域的标签位置,这对于只有两块的图表很好用,如果多了,应该是按右边的索引顺序来的吧。我没试,仅是猜测。

事件部分:

series: [{
                type: ‘pie‘,
                field: ‘data1‘,
                showInLegend: true,
                donut: donut,
                listeners : {
                    itemclick : function(o) {
                        alert(o.index);
                    }
                }
            }]

之后我按照index交后台处理数据发送前台生成window显示。

时间: 2024-10-27 11:17:18

ZP的EXTJS学习笔记(四)——图表的简单使用(图表点击事件)的相关文章

【Unity 3D】学习笔记四十六:输入与控制——键盘事件

在游戏中,玩家控制主角移动,按键攻击,选择行走.都需要在程序中监听玩家的输入.unity为开发者提供了input库,来支持键盘事件,鼠标事件以及触摸事件.本文主要回顾键盘事件,以后会逐文复习鼠标以及触摸事件. 键盘事件 一般的PC键盘有104个不同的按键,在程序中通过监听这些按键事件,从而进一步执行逻辑操作.如:射击游戏中,W表示前进,S表示后退,A表示左移,D表示右移. 按下事件 在脚本中,用input.GetKeyDown( )方法将按键值作为参数,监听此按键是否被按下.按下返回true,否

ZP的EXTJS学习笔记(三)——邮箱功能的开发(按钮事件、下拉框、分页、record小图标、整条数据格式处理、定时刷新、record复选删除、分组)

照例,先贴效果图: 本人比较满意,短时间开发的邮箱功能,这是收件箱,还有配套的发件箱与删除箱. 简单说下思路: 1.配置model.store,用的是MVC模式,可参考第一篇学习笔记. 2.页面简单布局: Ext.define('KitchenSink.view.mail.InBox', { extend: 'Ext.grid.Panel', alias : 'widget.inbox', xtype: 'inbox', autoHeight:true, bodyStyle:'width:100

ZP的EXTJS学习笔记(二)——calendar的改造(example改造、日程管理实现、json对date数据的前后台处理)

半月前做的日程提醒,改造Extjs4.2.1中example的calendar实现的.先给大家看下效果: 日程主页的展现: 按周显示以及日程编辑窗口: 这是我入行以来感觉做的最漂亮的一次了,当然得得益于ExtJs强大的功能.在学习ExtJs前期改造Example是个很好的学习手段,本人从中受益匪浅. 我用的是ssh2+Extjs做的,日程部分框架如下: 我是直接放在webroot下ext的文件夹下的,几个文件夹不能缺,examples下的shared与ux,example平级的resources

[ExtJS学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试

本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站:    http:

[ExtJS学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介

本文地址:http://blog.csdn.net/sushengmiyan/article/details/38537431 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源:http://docs.sencha.com/ext

EXTJS学习笔记--搭建实验环境

1.目的 在eclipse中搭建EXTJS的基础环境,学习如何按照从官方下载的代码中搭建新的Extjs工程 2.学习过程中遇到的问题 ext-4.2.1-gpl与ext-4.2.1-commercial的区别        ext-4.2.1-gpl:开源版本,使用GPL开源协议        ext-4.2.1-commercial:商业版本,收费,稳定 作为个人研究来讲,可以使用ext-4.2.1-gpl. 下载的Extjs目录中各个文件说明        主要目录说明 builds目录:压

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma