Javascript.RU

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

MultiSerries в Chart. Динамическое изменение типа данных - наследника Ext.data.Model
Посмотрел примеры в документации к Ext 4 на Sencha. Как я понял данные для оси X - это один массив, данные для оси Y - неограниченно массивов, ну как бы ограничивается лишь типом данных в соответствии с которым создается Store. У меня следующая ситуация: я заранее не знаю сколько графиков и какие я могу отобразить на диаграмме, то есть явно прописать что-то в конфиге fields для Ext.data.Model я не могу, а могу лишь задать потом, когда проведутся различные действия на сервере и я считаю информацию из результатов их работы. Как я могу динамически изменить тип данных унаследованный от Ext.data.Model, а именно изменить перечень полей данных? Видел метод setFields, но что-то я не могу понять, что должно быть в его параметрах. Или может я могу задать массив (изначально пустой), передать его в конфиге fields для модели данных, а потом забить его необходимыми значениями, соответствующими полям/значениям Y для графика, когда это будет возможно.
Может кто-то что-то делал подобное (необязательно для графика, может быть для грида)? Посоветуйте плз как быть?

Почитал исходный код ф-ции setFields, но так как я сразу сел за Ext Js, не программируя при этом до тех пор на js, то понял не все. fields как параметр это строковый массив, в соответствии с которым создаются Ext.data.Field, а вот остальные два - не пойму. Но мне кажется, что эту ф-цию можно использовать так ChartModel.setFields(myFields,new Object(), new Object()).

Последний раз редактировалось shepard90, 18.05.2013 в 15:33.
Ответить с цитированием
  #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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение окраски строк таблицы, исходя из данных? Space-06 Events/DOM/Window 4 14.02.2012 21:32