#php #jquery #highcharts
#php #jquery #highcharts
Вопрос:
Я использовал highcharts однострочный график серии. Кажется, все работает нормально, но когда я изменяю размер страницы (просто чтобы проверить отзывчивость или просто на мобильном устройстве). Значения исчезают. Я вижу ошибку в журналах консоли.
Вот как я генерирую диаграмму
Highcharts.stockChart('nav-chart', {
tooltip: {
pointFormat:"{point.y:.3f}u20ac"
},
chart: {
type: 'line',
zoomType: 'x',
pinchType: 'x',
panning: false,
<?php if (is_front_page()){ ?>
height: 700,
<?php } else { ?>
height: 500,
events: {
load: updateLegendLabel
}
<?php } ?>
},
updateLegendLabel
имеет некоторые вычисления, которые генерируют метки.
var chrt = !this.chart ? this : this.chart;
chrt.update({
legend: {
useHTML: true,
symbolPadding: 0,
symbolWidth: 0,
symbolHeight: 0,
symbolRadius: 0,
labelFormatter: function() {
var lastVal = this.yData[this.yData.length - 1],
chart = this.chart,
xAxis = this.xAxis,
points = this.points,
avg = 0,
counter = 0,
min, max;
... there is some business logic down there
points
var становится нулевым при изменении размера страницы. Почему это так? Нужно ли мне повторно обновлять dataset или что?
Комментарии:
1. ваш набор данных должен находиться в некоторой глобальной переменной javascript, чтобы он также был доступен при перерисовке.
Ответ №1:
Логика вложенности сервера и клиентской части не очень хороша. Лучше разделить логику, используя вот так. Приведенный ниже пример предназначен только для идеи, а не для точного кода. Но это может быть исправлено, если вы предоставите полный код, отделяющий вашу серверную логику от логики на стороне клиента.
<script>
//before graph area started
var dataA = '<?php echo $dataA;?>';
var dataB = '<?php echo $dataB;?>';
//graph logic started
// your graph code which can use above variables
// but the variable need to be available can be evaluated from your draw script.
</script>
затем используйте эти переменные в вашем скрипте graph.
Потому что при изменении размера браузера график перерисовывается, и его данные для просмотра недоступны при перерисовке графика. Но если будет использоваться приведенная выше логика, то данные будут доступны при каждом перерисовывании
Комментарии:
1. есть ли какой-либо способ отключить перерисовку, поскольку при изменении размера требуется не перерисовка
2. я не буду предлагать вам отключать перерисовку, потому что перерисовка требуется при каждом событии изменения размера окна, иначе это будет выглядеть очень странно. лучше присвоить некоторым переменным значения вашего php над скриптом, а затем использовать эти переменные. Поскольку при этом эти переменные данные будут доступны постоянно. Также код на стороне сервера всегда должен быть отдельным и имеет много преимуществ.