我试图从JSON数据动态地将'seriesstyles'设置为饼图。当'oneWeekStore'加载JSON数据时,我希望遍历每个记录的'color'并将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"}]}
非常感谢您的指导
答案 0 :(得分:1)
你有一个经典的竞争条件 - 你设置的动作事件依赖于状态未知的组件。
您的设置事件是加载数据存储,当加载完成后,它正在尝试与Panel进行交互,但此时我们还不知道Panel是否已经渲染。
你最好的办法是让其中一件事发生在另一件事上,例如:
1)加载商店
2)在启动load事件时,创建面板
var oneWeekStore = new Ext.data.JsonStore({
id:'jsonStore',
...,
listeners: {
load:function(store,records,options) {
var panel = new Ext.Panel({
...,
seriesStyles: colors,
...
});
}
}
});
或
1)创建面板(图表)
2)在面板的渲染事件中,加载商店(删除autoLoad:true)
var panel = new Ext.Panel({
id: '1week',
...,
listeners: {
render: function(pnl){
oneWeekStore.load();
}
}
});
希望有所帮助。