Изменение типа диаграммы дает: Uncaught TypeError: Невозможно прочитать свойство 'length' из неопределенных Highcharts - PullRequest
0 голосов
/ 06 июня 2019

Первоначально я загружаю график в режиме Подсвечник .

Затем при нажатии кнопки изменяется его на режим line .

ОбаДанные свечного и линейного графика имеют разные точки данных

candlestick = [[datetime, open, high, low, close], ....]
line = [[datetime, close], ....]

При нажатии кнопки

    if (requiredType == "candlestick") {
        chart.series[seriesindex].update({
            type: "candlestick",
            keys: ['x', 'open', 'high', 'low', 'close'],
            data: candlestick,
        }, true);

    } else if (requiredType == "line") {
        chart.series[seriesindex].update({
            type: "line",
            keys: ['x', 'y'],
            data: line,
        }, true);
    }

Изначально график загружается в режиме Подсвечник .При нажатии на кнопку типа изменения происходит сбой, и выдается следующая ошибка:

Uncaught TypeError: Cannot read property 'length' of undefined
    at Object.high (highstock.src.js:47746)
    at v.ohlc (highstock.src.js:47764)
    at v.l (highstock.src.js:47865)
    at v.t.processData (highstock.src.js:48205)
    at v.F.processData (highstock.src.js:53103)
    at highstock.src.js:16601
    at Array.forEach (<anonymous>)
    at G.setTickInterval (highstock.src.js:16600)
    at G.setScale (highstock.src.js:16936)
    at highstock.src.js:24043
high    @   highstock.src.js:47746
ohlc    @   highstock.src.js:47764
l   @   highstock.src.js:47865
t.processData   @   highstock.src.js:48205
F.processData   @   highstock.src.js:53103
(anonymous) @   highstock.src.js:16601
setTickInterval @   highstock.src.js:16600
setScale    @   highstock.src.js:16936
(anonymous) @   highstock.src.js:24043
redraw  @   highstock.src.js:24041
update  @   highstock.src.js:34110
toggleChart @   fno.js:336
(anonymous) @   fno.js:907
dispatch    @   jquery.js:4435
r.handle    @   jquery.js:4121

Но если изначально я загружаю график в линейном режиме, а затем переключаюсь в режим подсвечника, то это не приведет к сбою, но оставляет график пустым без рисованиячто угодно.

А также, если у меня на графике очень мало точек, например, 10, и график находится в режиме свечи, и я переключаю его в линейный режим, то он работает нормально, но с большим количеством данных, скажем, в режиме, чем500 баллов это не сработает.

1 Ответ

1 голос
/ 06 июня 2019

Вам также необходимо обновить approximation, который по умолчанию установлен на 'average' для line серии и 'ohlc' для ohlc серии.

$('#line').on('click', function() {
    chart.series[0].update({
        type: 'line',
        dataGrouping: {
            approximation: 'average'
        },
        keys: ['x', 'y'],
        data: line
    });
});

$('#candlestick').on('click', function() {
    chart.series[0].update({
        type: 'candlestick',
        dataGrouping: {
            approximation: 'ohlc'
        },
        keys: ['x', 'open', 'high', 'low', 'close'],
        data: candlestick
    });
});

Live demo: http://jsfiddle.net/BlackLabel/qh7wLc94/

Справочник по API: https://api.highcharts.com/highstock/series.ohlc.dataGrouping.approximation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...