Показать сообщение отдельно
  #2 (permalink)  
Старый 23.05.2013, 01:54
Новичок на форуме
Отправить личное сообщение для shepard90 Посмотреть профиль Найти все сообщения от shepard90
 
Регистрация: 11.03.2013
Сообщений: 9

Проблема актуальна все еще. Вопрос теперь в другом. расскажу все по порядку:
1. функцию для изменения типа данных использовал следующим образом ChartModel.setFields(myFields, 'id',null);
'id' это какое-то скрытое поле модели данных. в сторе оно не отображается. Если пробежаться по исходнику Model.js фреймворка версии 4.2 то можно обнаружить, что значение у idProperty по умолчании 'id', а clientIdProperty:null. Именно с такими значениями полей создается новый обычно объект при его конфигурировании. Поэтому передаю в функции то же самое.
2. Также мне необходимо было обеспечить динамическое изменение поля fields для одной из Axes графика. Для этого я просто присвоил туда пустой массив и по необходимости он заполняется в ходе работы приложения, т.е. прежде чем захочу добавить новый график на диаграмму.
3. Добавление ряда данных. Всегда прежде чем грузить новые данные в динамически расширяемое хранилище (в соответствии с изменяемой моделью данных) необходимо создавать соответствующий Ext.chart.series.Series, именно он в основном и ответственен за отображение нового графика на диаграмме, он просто берет в хранилище указанные поля xField и yField. Я создаю новый объект и докидываю его в конфиг объекта Ext.chart.Chart - series как последний элемент массива (по непонятным причинам в классе отсутствует описание таких очевидных методов как addSeries и removeSeries).

В результате всех этих действий графики у меня все же не отображаются. firebug выдает ошибку TypeError: a.drawSeries is not a function. Хочу заметить, что если статично прописать в series например [{type:'line', xField:'time',yField:'Kt'}], то график отображается (ну естественно если я хочу построить график Kt(time), а не какой-нибудь другой).
Привожу здесь необходимые строчки кода:
var chartModelArray=['time'];
Ext.define('ChartSolidModel',{
                        extend:'Ext.data.Model',
                        fields: chartModelArray
                });
var yFieldsArray=[];


var chartSolidStore=Ext.create('Ext.data.JsonStore',{
                model:'ChartSolidModel',
                proxy:{
                        type:'ajax',
                        url:'load_dataSolid_for_chart.php',
                        reader:{
                                type:'json',
                                root:'solidChart'
                        }

                }
        });


var solidChart=Ext.create('Ext.chart.Chart',{
                store: chartSolidStore,

                axes:[
                {
                type:'Numeric',
                position:'left',
                id:'YSolidAxis',
                title:'Концентрация',
                fields:yFieldsArray,
                },
                {
                type:'Numeric',
                position:'bottom',
                id:'XSolidAxis',
                title:'Время',
                fields:['time'],
                },
                ],
                //series: [{type:'line',xField:'time',yField:'Kt'}]
        });


handler: function(){
                var yF=cmbBoxSolid.getValue();
                respSolidStore.getProxy().extraParams={'s_Substances':cmbBoxSolid.getValue()};
                respSolidStore.load();//этот стор не для chart
                solidChart.series.items.push(new Ext.chart.series.Series({
                             type:'line',
                             axis:'left',
                             title: yF,
                             smooth: true,
                             xField: 'time',
                             yField: yF,
                             markerConfig:{
                                                type:'circle',
                                                size: 0,
                                                radius: 0}
                  }));
                  yFieldsArray[yFieldsArray.length]=yF;
                  chartModelArray[chartModelArray.length]=yF;
                  ChartSolidModel.setFields(chartModelArray,'id',null);
                  chartSolidStore.getProxy().extraParams={'s_Substances':cmbBoxSolid.getValue(),'exactitude':Ext.getCmp('esp').getValue()};                                                                       chartSolidStore.load();
                                                                
}


Я все более менее проанализировал в консоли файрбага. Данные в объекты записываются вроде как надо. только вот с series непонятка. Опять же, если прописать статически в конфигурации series: [{type:'line',xField:'time',yField:'Kt'}]
, то в файрбаге можно проследить, что при этом создается экземпляр типа Ext.chart.series.Line, а я делаю Ext.chart.series.Series. А все потому что при попытке
solidChart.series.items.push(new Ext.chart.series.Line({//...});

вылетает TypeError. На самом деле совершенно мне непонятно почему.

Последний раз редактировалось shepard90, 23.05.2013 в 02:04.
Ответить с цитированием