HighCharts: неожиданное значение NaN при разборе атрибута y

У меня есть код ExtJs + Highcharts, как здесь:

Ext.define('Cabinet.view.workspace.indexCharts.Line', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.IndexLineChart',
    show: function (chartDiv, valuesList) {
        valuesList = '[' + valuesList + ']';
        console.log(valuesList);
        charts[chartDiv] = new Highcharts.Chart({
            chart: {
                renderTo: chartDiv,
                type: 'line'
            },
            title: {
                text: 'Some Title'
            },
            yAxis: {
                categories: [2005, 2006, 2007]
            },

            series: [{ data: valuesList}],

            legend: {
                layout: 'horizontal',
                align: 'center'
            }
        });
    }
});

Но после того, как я вызываю этот виджет, я получаю некоторую ошибку:

Неожиданное значение NaN при разборе атрибута y.

return e}function oa(a){return Fa(a)?a:[a]}function p(){var a=arguments,b,c,d=a

console.log отображается: [825557000000,1089384000000,1404492600000]

Где в этом проблема?


person ForceMan    schedule 02.10.2012    source источник


Ответы (2)


Похоже, что valuesList — это строка, которая должна быть массивом.

Вам нужно преобразовать его в массив, прежде чем передавать его в highchart, вы можете сделать это различными способами, например

valuesList = '[' + valuesList + ']';
valuesList = JSON.parse(valuesList);
//OR
valuesList = jQuery.parse(valuesList);
//OR
valuesList = eval(valuesList);

Выберите тот, который вам подходит. Ознакомьтесь с разбором строки в массив @ jsFiddle, чтобы понять, что происходит.

person Jugal Thakkar    schedule 02.10.2012
comment
Спасибо, @Jugal. Несколько раз спустя я понял, что мне нужно преобразовать эту строку. Я пробую что-то вроде этого: valuesList = valuesList.map(function (x) { return parseFloat(x) }); И это прекрасно работает! Еще раз спасибо. Проблема решена. - person ForceMan; 02.10.2012

Это связано с тем, что объекту series.data требуется значение, представляющее собой массив точек данных, но вы предоставляете ему строку, содержащую JSON-представление массива. valueList должен быть массивом чисел, а не строкой.

Если valueList представляет собой массив входящих чисел, то эта строка преобразует его в строку:

valuesList = '[' + valuesList + ']';

Не делай этого.

person JohnnyHK    schedule 02.10.2012
comment
valuesList его массив строк (значений). - person ForceMan; 02.10.2012