NULL in data.store
Всем доброго времени суток. :)
Есть проблема при построении линейных графиков. Если в store в одной из ячеек появляется значении NULL, то линия отсраивается некорректно. К примеру значения для постреяния: Date Line_1 Line_2 2012-05-10 00:00:00 50,4 48 2012-05-10 18:00:00 NULL NULL 2012-05-11 06:00:00 NULL 51 2012-05-12 00:00:00 48 49 В Ext.data.Field, есть такое свойство как useNull, при установке его в false, график отстраивается так же некорректно, измеятся лишь то, что при наведении на точку со значением появляется title с пустотой. Может есть возможность в ExtJS исключать значения NULL? Править запросы пока не очень хочется. P.S. вот пример некорректной отрисовки с данными: ![]() |
Первое что пришло на ум.
dataStore.on('load', function() { //здесь вносим исправления в datastore так как нам удобно } пример, перебора 1) store.on('load', function(store, records) { for (var i = 0; i < records.length; i++) { console.log(records[i].get('name')); }; }); пример перебора 2) myStore.each( function (model) { console.log( model.get('name') ); }); Второе что пришло на ум. изменить renderer в грид |
DjDiablo,
Спасибо за помощь!=) Но наиболее простым решением вышла доп. сортировка в PHP, перед отправкой json. |
Кстати опять таки вопрос возник.
Вот json строка с данными: {"contents":[{"name":0,"data1":48,"name2":0,"data2":50},{"name" :1,"data1":48,"name2":1},{"name":2,"data1":50.4,"n ame2":2},{"name":3,"data1":50.4,"name2":3},{"name" :4,"data1":48,"name2":4},{"name":5,"data1":48,"nam e2":5},{"name":6,"data1":48,"name2":6},{"name":7," data1":48,"name2":7},{"name":8,"data1":48,"name2": 8},{"name":9,"data1":48,"name2":9},{"name":10,"dat a1":50.4,"name2":10},{"name":11,"data1":48,"name2" :11},{"name":12,"data2":50},{"name":12,"data2":48},{"name":12,"data1":50.4,"name2":12},{"name":13,"d ata1":50.4,"name2":13},{"name":14,"data1":50.4,"na me2":14},{"name":15,"data1":50.4,"name2":15},{"nam e":16,"data1":48,"name2":16},{"name":17,"data1":48 ,"name2":17},{"name":18,"data1":50.4,"name2":18},{ "name":19,"data1":48,"name2":19},{"name":20,"data1 ":50.4,"name2":20},{"name":21,"data1":50.4,"name2" :21},{"name":22,"data1":50.4,"name2":22},{"name":2 3,"data1":50.4,"name2":23,"data2":48}]} Вот код графика: var ColumnChart = Ext.create('Ext.chart.Chart', { height: 600, width: 980, x: 0, y: 0, id: 'ColumnChart', xtype: 'chart', style: 'background:#fff', animate: true, store: store, axes: [{ type: 'Numeric', position: 'left', fields: 'data1', grid: true, minimum: 0 }, { type: 'Category', position: 'bottom', fields: 'name2' }], series: [{ type: 'column', axis: 'left', gutter: 80, xField: 'name2', yField: 'data1', tips: { trackMouse: true, width: 165, height: 28, renderer: function(storeItem, item) { this.setTitle(storeItem.get('name2') + ' : ' + storeItem.get('data1')); } }, style: { fill: '#38B8BF' }, label: { display: 'insideEnd', 'text-anchor': 'middle', field: 'data1', orientation: 'vertical', color: '#333' } }] }); И собственно сам график: http://saveimg.ru/show-image.php?id=...17dc2b09521820 Вопрос: почему отсраиваются эти два пустых элемента??? |
немало нареканий сама json строка с данными вызывает
Почему три обьекта с name 12 ?, Почему местами применяется data2 вместо data1, если renderer (axes кстати тоже) берёт данные только из data1? почему у одних записей есть "name2" а у других нет {"name":12,"data2":50}, {"name":12,"data2":48}, {"name":12,"data1":50.4,"name2":12} И самое странное, откуда тут взялись пробелы посреди слов и цифр. Что это опечатки, или это сервер так вернул ? {"name":2 3,"data1":50.4,"name2":23,"data2":48} {"nam e":16,"data1":48,"name2":16} {"name":2,"data1":50.4,"n ame2":2} {"name":10,"dat a1":50.4,"name2":10} и тд |
DjDiablo,
Дело в том, что изначально строится два различных графика. Линейный, с двумя линиями: ось У - 'name', ось Х - 'data1','data2'. Гиcтограмма: ось У - 'name2', ось Х - 'data1'. Теперь понятней, откуда лишние параметры в строке.:) А пробелы, думается все же я скопировал в торопях строку. |
Так вот, если к графику линейному у меня пока нареканий не выявлено. То вот Гистограмма смущает)))
|
Сейчас отправляю такую строку:
{"contents":[{"data1":48,"name":"May 1 2012 12:00AM","data2":50,"name2":"May 1 2012 12:00AM"},{"data1":48,"name":"May 1 2012 12:00PM"},{"data1":50.4,"name":"May 1 2012 6:00PM"},{"data1":50.4,"name":"May 2 2012 6:00AM"},{"data1":48,"name":"May 2 2012 6:00PM"},{"data1":48,"name":"May 3 2012 12:00AM"},{"data1":48,"name":"May 3 2012 12:00PM"},{"data1":48,"name":"May 3 2012 6:00PM"},{"data1":48,"name":"May 4 2012 6:00AM"},{"data1":48,"name":"May 4 2012 12:00PM"},{"data1":50.4,"name":"May 5 2012 12:00AM"},{"data1":48,"name":"May 5 2012 6:00AM"},{"data2":50,"name2":"May 5 2012 11:14AM"},{"data2":48,"name2":"May 5 2012 11:14AM"},{"data1":50.4,"name":"May 6 2012 12:00AM"},{"data1":50.4,"name":"May 6 2012 6:00AM"},{"data1":50.4,"name":"May 6 2012 6:00PM"},{"data1":50.4,"name":"May 7 2012 12:00AM"},{"data1":48,"name":"May 7 2012 12:00PM"},{"data1":48,"name":"May 7 2012 6:00PM"},{"data1":50.4,"name":"May 8 2012 6:00AM"},{"data1":48,"name":"May 8 2012 12:00PM"},{"data1":50.4,"name":"May 9 2012 12:00AM"},{"data1":50.4,"name":"May 9 2012 6:00AM"},{"data1":50.4,"name":"May 9 2012 6:00PM"},{"data1":50.4,"name":"May 10 2012 12:00AM","data2":48,"name2":"May 10 2012 12:00AM"}]} Линейный, с двумя линиями: ось У - 'name','name2' ось Х - 'data1','data2'. Гиcтограмма: ось У - 'name', ось Х - 'data1'. Но результат тот же. Выходит так, что когда в элементе нет данных о паре 'name' - 'data1', в гистограмму добавляется пустой столбец. Как, зачем и почему? О_о |
DjDiablo,
А возможно сочетание нескольких store в одном Графике? Последовал Вашему совету, пересобираю магазин для второго графика. var xChartColumn = new Array(); var yChartColumn = new Array(); store.on('load', function(store, records) { for (var i = 0; i < records.length; i++) { xChartColumn[i] = records[i].get('name'); yChartColumn[i] = records[i].get('data1'); if (xChartColumn[i] != xChartColumn[i-1]){ alert(xChartColumn[i] + ' x ' + yChartColumn[i]); store_r1.add({name: xChartColumn[i], data1: yChartColumn[i]}); // добавляю данные в новый магазин. } }; }); |
А возможно сочетание нескольких store в одном Графике?
стандартным методом нет, ибо не непонятно как их в одном графике сочетать :) |
Часовой пояс GMT +3, время: 20:48. |