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顯示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM