Проблема актуальна все еще. Вопрос теперь в другом. расскажу все по порядку:
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. На самом деле совершенно мне непонятно почему.