Установка начальной видимости столбцов на графике по имени серии - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь установить начальную видимость некоторых рядов данных графиков по имени столбца.

Это потому, что данные поступают из файла CSV со столбцами, которые могут приходить или уходить, но я знаю, чтопару столбцов, которые я хочу отключить по умолчанию - но я не знаю, каким может быть номер столбца (только имя).

Я новичок в javascript, поэтому ответ, вероятно, прост.Я пытаюсь сделать это:

<script type="text/javascript">
    g = new Dygraph(
        document.getElementById("graphdiv"),  // containing div
        "last/test.csv",
        {
            connectSeparatedPoints: true,
            includeZero: true
        }
    );

    g.setVisibility(g.indexFromSetName("writer_write_start") - 1, 0);
</script>

Но это дает мне ошибку.Если я запускаю команду setVisibility из консоли javascript или события onclick, она работает нормально.Я подозреваю, что это как-то связано с тем, что Dygraph не загружается полностью к тому времени, когда я пытаюсь запустить методы, ссылающиеся на данные в файле CSV, и мне нужно запустить это каким-то другим способом после полной загрузки Dygraph.

1 Ответ

3 голосов
/ 04 марта 2012

Когда вы вызываете new Dygraph с указанием пути к CSV-файлу в качестве параметра данных, вызов является асинхронным.Таким образом, ваше подозрение верно - когда вы звоните g.indexFromSetName("writer_write_start"), данные, необходимые для получения нужного ответа, еще не доступны.

Лучший способ справиться с этим - переместить код setVisibility вначальный drawCallback, вот так:

<script type="text/javascript">
    g = new Dygraph(
        document.getElementById("graphdiv"),  // containing div
        "last/test.csv",
        {
            connectSeparatedPoints: true,
            includeZero: true,
            drawCallback: function(dg, is_initial) {
                if (!is_initial) return;
                dg.setVisibility(dg.indexFromSetName("writer_write_start") - 1, 0);
            }
        }
    );
</script>
...