2011-12-21 2 views
2

У меня возникли проблемы с отображением строки, изображенной ниже. В частности, последние шесть значений являются нулевыми, которые (правильно) не показаны в строке серии, но (неправильно) имеют отображаемую для них маркерную точку (см. Вверху справа от изображения ниже).extjs 4 проблемы с отображением линейных диаграмм

line chart with bad rendering

Я потянув данные графика из базы данных в формате JSON:

// data store fields 
Ext.define('Graphs', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'the_quota',  type: 'int'}, 
     {name: 'count_pt_year', type: 'int'}, 
     {name: 'date_string', type: 'string'} 
    ] 
}); 

// get the graph data 
var graphStore = Ext.create('Ext.data.Store', { 
    model: 'Graphs', 
    proxy: { 
     type: 'ajax', 
     url: 'sqlRequest.jsp?queryName=events_getGraph', 
     timeout: 160000, 
     reader: 'json' 
    }, 
    autoLoad:false 
}); 

Если изменить запрос, чтобы вернуть эти нулевые значения в качестве контролей вместо (''), то читатель JSON преобразует их к нулям, а значения отображаются как ноль в нижней части графика с последовательной линией, которая хуже, чем маркеры, оштукатуренные потолком без линейки.

Я не смог найти никакой опции конфигурации в Ext.chart.Series, чтобы скрыть нулевые значения на графике. Я также не смог найти опцию конфигурации в Ext.data.Store, чтобы вернуть пробелы как пробелы, а не «0».

Ищет другое обходное решение.

Или кто-нибудь разрешил эти проблемы из самой библиотеки (ext-all.js)?

+0

Хотя я согласен, что дисплей выглядит плохо, как можно ожидать нулевые значения для отображения, как разрыв в линии? Кажется странным, что нуль будет действительным значением в такой диаграмме. –

+0

@bmoeskau «Кажется странным, что нуль будет действительным значением в такой диаграмме». Это было мое чувство. Да, он хотел, чтобы он отображался как промежуток. То есть, шесть точек в правом верхнем углу графика (нулевые значения) не должны быть там. – Geronimo

ответ

7

Существует опция конфигурации под Ext.data.Field под названием useNull. Если полученные данные не могут быть проанализированы на число, вместо этого будет использоваться null. На данный момент я не могу вспомнить, если это только будет решить эту проблему, и у меня есть память один раз, используя пользовательскую функцию новообращенного, что-то вроде этого:

convert: function(value){ 
    if(typeof value !=== 'number') // or other similar conversion 
     return undefined; 
    return value; 
} 

Если это не работает, вам может потребоваться настроить ваш магазин/считыватель, чтобы полностью исключить записи, содержащие нежелательное значение null.

EDIT - Использование useNull выглядит следующим образом: {name: 'someName', type: 'int', useNull: true}

+0

Спасибо Эрик, ** конвертировать: ** решил. ** useNull: ** не работает, кажется, что линейные диаграммы extjs отображают данные «null» или «NaN», как показано на моем изображении выше, но «неопределенные» данные не отображаются на линейном графике. – Geronimo

+0

Одна проблема, с которой я столкнулся, заключалась в том, что мне пришлось удалить тип ext.data.Model типа: ** type: 'int' **, прежде чем он сработает. Это было потому, что тип cast преобразовал нуль или пробелы в число до того, как функция преобразования выполнит, и она всегда возвращается как ноль, пока я не удалю ее. – Geronimo

+0

Рад, что я смог помочь. И теперь у меня есть определенная ссылка для следующего раза, когда я сталкиваюсь с этим. – Eric

Смежные вопросы