Изменение темы Highcharts (частично работает) - PullRequest
9 голосов
/ 26 марта 2012

У меня проблема с изменением темы для старших.Я создал массив для хранения всех тем и пытаюсь изменить их с помощью события выбора списка onChange.

var highcharts_theme = [];

/* Default theme */
highcharts_theme.push({});

/* Dark Blue theme */
highcharts_theme.push({
    colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee",
        "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"],
    chart: {
        backgroundColor: {
            linearGradient: [0, 0, 250, 500],
            stops: [
                [0, 'rgb(48, 48, 96)'],
                [1, 'rgb(0, 0, 0)']
            ]
        },
.... Shortened for brevity.....

Мой код для изменения темы:

    $('#theme-type').selectmenu({ width: 200 }).change(function (e) {
        var themeIndex = parseInt($('#theme-type').val());
        Highcharts.theme = highcharts_theme[themeIndex];
        // Apply the theme
        highchartsOptions = Highcharts.setOptions(Highcharts.theme);
    });

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

Кто-нибудь знает оправильный способ полностью сбросить тему?

Спасибо

Ответы [ 2 ]

16 голосов
/ 18 марта 2014

Каждый раз, когда вы устанавливаете тему, она сливается с существующей темой, и, следовательно, любая опция, которой нет в новой теме, выбирается из существующей темы. Это может быть не всегда желательно.

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

// Make a copy of the defaults, call this line before any other setOptions call
var HCDefaults = $.extend(true, {}, Highcharts.getOptions(), {});

function ResetOptions() {
    // Fortunately, Highcharts returns the reference to defaultOptions itself
    // We can manipulate this and delete all the properties
    var defaultOptions = Highcharts.getOptions();
    for (var prop in defaultOptions) {
        if (typeof defaultOptions[prop] !== 'function') delete defaultOptions[prop];
    }
    // Fall back to the defaults that we captured initially, this resets the theme
    Highcharts.setOptions(HCDefaults);
}

После сброса темы применение новой темы будет работать так, как если бы это была первая применяемая тема.

Демо @ jsFiddle

4 голосов
/ 02 апреля 2012

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

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