2015-06-25 2 views
1

Я пытаюсь заполнить Highcharts от объекта. Первоначально диаграмма загружалась, но затем исходный объект менялся. Немного сложно сказать, если вы любезно проверите код JSFiddle и выполните следующие действия:Структура объекта изменена внутренне

Нажмите кнопку1 => Загрузка диаграмм с данными [687, 687], как ожидалось.

Click Button2 => Загрузка диаграмм с данными [546, 546] как и ожидалось.

Снова нажмите кнопку 1 => Ничего не происходит, потому что getAllData.T1.C1.M1 теперь изменен с [687, 687] на [Object, Object].

Опять же, нажмите Button2 => Загрузка диаграмм с данными [546, 546], как и следовало ожидать (см. Вывод console.log ниже).

Может кто-нибудь объяснить?

JSFiddle

Ниже console.log я получаю в моем Chrome для каждой кнопки.

[687, 687] 
[546, 546] 
[Object, Object] 
    0: Object 
    y: 687 
    __proto__: Object 
    1: Object 
    y: 687 
    __proto__: Object 
    length: 2 
    __proto__: Array[0] 
[546, 546] 
+1

Вам необходимо установить 4-й аргумент ['Series.setData'] (http://api.highcharts.com/highcharts#Series.setData) (* updatePoints *) на 'false'. – Phil

+0

ничего себе .. не могли бы вы уточнить, что это? Я читал документацию по Highcharts, но не понял. – abdfahim

ответ

2

Как уже упоминалось в моем комментарии, вам необходимо установить updatePoints аргумент Series.setData в false, чтобы предотвратить Highcharts от простого обновления существующих точек данных (он делает это из-за ваших наборов данных той же длины) ,

Что-то вроде этого должно быть достаточным и сохранить анимацию.

chart.series[0].setData(data[0], false, false, false); 
chart.redraw(); 

JSFiddle

+0

ya, это определенно работает .. так что «обновление существующих точек данных» означает, что он просто меняет источник (запрашивая мою цель обучения)? – abdfahim

+0

также, должен ли третий параметр быть правдивым, чтобы сохранить анимацию? – abdfahim

+1

@AbdFahim при использовании по умолчанию * updatePoints *, Highcharts напрямую изменяет переданный в массиве данных. Поскольку они передаются по ссылке в JavaScript, это означает, что исходный массив модифицирован. – Phil

0

Там должна быть ошибка в методе updatePoint. Попробуйте следующее: chart.series[0].setData(data[0], true, false, false); (данные, перерисовать, анимацию, обновить точки)

+0

Это определенно не ошибка. Этот ответ работает, но вы теряете анимацию – Phil

+0

Вот почему я перечислил аргументы в своем ответе, поэтому любой, кто его читает, может выбрать свои предпочтения, не глядя на то, что означают эти ложные/истинные. Может быть, не ошибка, но плохое кодирование. –

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