Axx диаграммы CanvasJS undefined

У меня есть диаграмма CanvasJS, и я хочу динамически установить ее stripLine.

chart = new CanvasJS.Chart("chart",
    {
        backgroundColor: "rgba(0,0,0,0)",
        legend: {
            fontColor: "#FFF"
        },
        axisX: [{
            title: "Test axisX title",
            stripLines: [
                {
                    value: 250,
                    color: "#FF0000"
                }
            ],
        }],
        data: [] //Later add datapoints
    });

Функция, которая устанавливает позицию полосы полоски:

var setVerticalLine = function (xPos) {
if (typeof chart !== 'undefined') {
    console.info(JSON.stringify(chart));  //debug info
    console.info("chart.axisX type: " + typeof chart.axisX); //debug info
    chart.axisX[0].stripLines[0].set("value", xPos);
}};

После рендеринга я вызываю функцию, но набор не удался. Ошибка:

Uncaught TypeError: Cannot read property '0' of undefined..."
The debug info: "chart.axisX type: undefined". The dumped chart object contains the axisX: "..."axisX":[{"title":"Test axisX title","stripLines":[{"value":250,"color":"#FF0000"}]}]...

Каким может быть undefined axisX, когда я вижу его на визуализированной диаграмме с заголовком и полосковой линией? Почему я не могу получить к нему доступ и изменить? Может ли кто-нибудь помочь мне решить эту проблему?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
347
2

Ответы 2

Вы не видите chart.axisX на сброшенном объекте. То, что вы видите, на самом деле chart.themeOptions.axisX. Кроме того, chart.themeOptions.axisX.set не является функцией (хотя chart.themeOptions.axisX.__defineSetter__ есть).

Вы правы, и вы помогли мне решить мою проблему. После 2+ часов работы над ним функция установки (которая работает в соответствии с документацией и ответами) по-прежнему не работает. Поэтому я изменяю options.axisX.stripLine.value и повторно визуализирую диаграмму.

RPeti 20.09.2018 10:33

Согласно документация, «Диаграмма должна быть отрисована, прежде чем вы сможете использовать метод set». Отрисовка диаграммы перед вызовом setVerticalLine в вашем случае должна работать нормально.

Вот рабочий код:

var chart = new CanvasJS.Chart("chart", {	
  backgroundColor: "rgba(0,0,0,0)",
  legend: {
    fontColor: "#FFF"
  },
  axisX: [{
    title: "Test axisX title",
    stripLines: [
      {
        value: 250,
        color: "#FF0000"
      }
    ],
  }],
  data: [] //Later add datapoints
});

chart.options.data.push({type: "line", dataPoints: [{x: 200, y: 100}, {x: 300, y: 50}]}); //Dummy datapoints
chart.render();// Render Chart before using set method

var setVerticalLine = function (xPos) {
  if (typeof chart !== 'undefined') {
    chart.axisX[0].stripLines[0].set("value", xPos);
  }
};

setVerticalLine(220); //Update Stripline value to 220
<script src = "https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<div id = "chart" style = "height: 260px; width: 100%;"></div>

Спасибо за предложение. Мой плохой, думаю, я был недостаточно точен. Функция-модификатор stripLine вызывается из обработчика кнопки. Когда я вызываю это, диаграмма отображается, я вижу, с полосой линии, которая создается в конструкторе (значение: 250). Объект диаграммы доступен, я могу его структурировать и выгрузить. Ошибка вызвана следующей строкой: chart.axisX [0] .stripLines [0] .set ("значение", xPos); . Chart.axisX не определен. Как говорит @thepiercingarrow, существует только chart.options.axisX, у которого нет функции установки. Это противоречит документации, и я не могу решить эту проблему.

RPeti 17.09.2018 09:46

После первого рендеринга диаграммы (например, chart.render ()), chart.axisX [0] будет доступен, и chart.axisX [0] .stripLines [0] .set () должен работать нормально.

Indranil Singh Deo 17.09.2018 11:05
@RPeti, Вы, кажется, находите эту проблему, когда в диаграмме нет dataSeries (data = [] => no dataSeries присутствует). Когда на диаграмме нет dataSeries, оси не будет. Добавление фиктивной dataSeries (которую вы можете обновить позже) перед рендерингом диаграммы может помочь вам получить доступ к axisX. Отметьте это jsfiddle
Vishwas R 17.09.2018 11:12

Другие вопросы по теме