Как динамически применять seriesStyles к круговой диаграмме в ExtJs - PullRequest
1 голос
/ 21 января 2010

Пытаюсь динамически настроить 'seriesstyles' на круговую диаграмму из данных JSON. Когда «oneWeekStore» загружает данные JSON, я хочу перебирать «цвет» каждой записи и динамически устанавливать для 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 Ответ

1 голос
/ 09 февраля 2010

У вас там классическое состояние гонки - вы запускаете событие, которое зависит от Компонента, статус которого неизвестен.

Событием, которое вы отключили, является загрузка хранилища данных, когда оно завершает загрузку, оно пытается взаимодействовать с Panel, но в данный момент мы не знаем, была ли панель отображена.

Лучше всего, чтобы одна из этих вещей произошла в ответ на другую, например:

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) при событии рендеринга панели, загрузить хранилище (удалить autoLoad: true)

var panel = new Ext.Panel({
    id: '1week',
    ...,
    listeners: {
        render: function(pnl){
            oneWeekStore.load();
        }
    }
});

Надеюсь, это поможет.

...