如何在ExtJs中动态地将seriesStyles应用于piechart

如何在ExtJs中动态地将seriesStyles应用于piechart,extjs,pie-chart,Extjs,Pie Chart,我试图从JSON数据中动态地将“seriesstyles”设置为piechart。当“oneWeekStore”加载JSON数据时,我希望通过每个记录的“颜色”和setSeriesStyles动态迭代到PieChart。下面是片段 var oneWeekStore = new Ext.data.JsonStore({ id:'jsonStore', fields: ['appCount','appName'], autoLoad: true,

我试图从JSON数据中动态地将“seriesstyles”设置为piechart。当“oneWeekStore”加载JSON数据时,我希望通过每个记录的“颜色”和setSeriesStyles动态迭代到PieChart。下面是片段

var oneWeekStore = new Ext.data.JsonStore({
        id:'jsonStore',
         fields: ['appCount','appName'],
         autoLoad: true,
         root: 'rows',
         proxy:storeProxy,
         baseParams:{
                   'interval':'oneWeek',
                   'fromDate':frmDt.getValue()        
         },
         listeners: {load: {
         fn:function(store,records,options) {
         /*I wish iterate through each record,fetch 'color'
           and setSeriesStyles. I tried passing sample arrays 
           as paramater to setSeriesStyles like 

**colors= new Array('0x08E3FE','0x448991','0x054D56');
Ext.getCmp('test12').setSeriesStyles(colors)**   

           But FF throws error "this.swf is undefined". Could 
           you please let me know  the right format to pass as
           parameter.      */   
                  }
    });


var panel = new Ext.Panel{
              id: '1week',                                                        title:'1 week',                                               
         items : [ 
                           { id:'test12',
              xtype : 'piechart', 
              store : oneWeekStore, 
              dataField : 'appCount', 
              categoryField : 'appName',
              extraStyle : {
                                legend:{
                        display : 'right',
                        padding : 5,
                        spacing: 2, font :color:0x000000,family:
                                'Arial', size:9},
                        border:{size :1,color :0x999999},
                        background:{color: 0xd6e1cc}
                                                                           }                                    }                                                             }                                     ]                               }
我的JSON数据如下所示:

{"success":true,"rows":[{"appCount":"9693814","appName":"GED","color":"0xFB5D0D"},{"appCount":"5731","appName":"SGEF"","color":"0xFFFF6B"}]}

非常感谢您的指导

您在那里有一个经典的比赛条件-您设置了一个依赖于未知状态的组件的活动

您设置的事件是加载数据存储,当加载完成后,它将尝试与面板交互,但此时我们不知道面板是否已渲染

你最好的办法是让这些事情中的一件发生在对另一件的反应中,例如:

1)加载存储

2)启动负载事件时,创建面板

var oneWeekStore = new Ext.data.JsonStore({
     id:'jsonStore',
     ...,
     listeners: {
         load:function(store,records,options) {
              var panel = new Ext.Panel({
                  ...,
                  seriesStyles: colors,
                  ...
              });
         }
     }
});

1)创建面板(图表)

2)在面板的渲染事件中,加载存储(移除自动加载:true)


希望这能有所帮助。

你有一个经典的比赛条件——你设置了一个运动中的事件,该事件依赖于一个状态未知的组件

您设置的事件是加载数据存储,当加载完成后,它将尝试与面板交互,但此时我们不知道面板是否已渲染

你最好的办法是让这些事情中的一件发生在对另一件的反应中,例如:

1)加载存储

2)启动负载事件时,创建面板

var oneWeekStore = new Ext.data.JsonStore({
     id:'jsonStore',
     ...,
     listeners: {
         load:function(store,records,options) {
              var panel = new Ext.Panel({
                  ...,
                  seriesStyles: colors,
                  ...
              });
         }
     }
});

1)创建面板(图表)

2)在面板的渲染事件中,加载存储(移除自动加载:true)


希望这能有所帮助。

我也在尝试找出setSeriesStyles的正确格式-YUI的文档和论坛很糟糕…我也在尝试找出setSeriesStyles的正确格式-YUI的文档和论坛很糟糕。。。