Extjs 4 проблемы с рендерингом линейного графика - PullRequest
2 голосов
/ 21 декабря 2011

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

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)?

1 Ответ

7 голосов
/ 23 декабря 2011

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

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

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

РЕДАКТИРОВАТЬ - Использование useNull выглядит следующим образом: {name: 'someName', type: 'int', useNull: true}

...