Используя Sencha GXT 3, создать линейную диаграмму, заполненную динамическим количеством полей серии строк?

Можно ли с помощью Sencha GXT 3.0 создать линейную диаграмму и заполнить ее динамическим числом полей линейных рядов, и если да, то какой рекомендуемый метод?

Я знаю, что в диаграмму можно добавить несколько полей серии, но примеры линейных диаграмм (и другие примеры диаграмм в этом отношении) используют интерфейс, который расширяет PropertyAccess<?>, и интерфейс указывает статическое количество ожидаемых полей (например, data1() , данные2(), данные3() и т. д.). Если интерфейс должен использоваться для указания полей, добавляемых в диаграмму, как вы можете учитывать диаграмму, которая может потребовать n количества полей (т.е. n количества рядов строк на данной диаграмме).

Пример на сайте Sencha:

http://www.sencha.com/examples/#ExamplePlace:linechart


person Bionic_Geek    schedule 18.05.2012    source источник


Ответы (1)


Я столкнулся с той же проблемой. Было бы намного лучше, если бы у каждой серии был магазин, а не один магазин на графике.

У меня был один длинный список значений метрик в metricDataStore. Каждое значение метрики имеет описание. Я хотел, чтобы все значения метрик с одинаковым описанием отображались в одной (и только в одной) серии. У меня были поставщики значений для каждой серии, возвращающие null для осей x и y, если значение не должно было быть в серии.

Это кажется мне хаком, но это работает для моего использования:

    myChart = new Chart<MetricData>();
    myChart.setStore(metricDataStore);

. . .

    for (MetricInfo info : metricInfoData) {
        LineSeries<MetricData> series = new LineSeries<MetricData>();
        series.setChart(myChart);
        series.setSmooth(false);
        series.setShownInLegend(true);
        series.setHighlighting(true);
        series.setYAxisPosition(Chart.Position.LEFT);
        series.setYField(new MetricValueProvider(info.getName()));
        series.setXAxisPosition(Chart.Position.BOTTOM);
        series.setXField(new MetricTimeProvider(info.getName()));
        myChart.addSeries(series);
    }

. . .

private class MetricTimeProvider extends Object implements ValueProvider<MetricData, Long> {
    private String metricName;

    public MetricTimeProvider(String metricName) {
        this.metricName = metricName;
    }

    @Override
    public Long getValue(MetricData m) {
        if (metricName != null && metricName.equals(m.getLongDesc()))
            return m.getId();
        else
            return null;
    }

    @Override
    public void setValue(MetricData m, Long value) {
    }

    @Override
    public String getPath() {
        return null;
    }
}

private class MetricValueProvider extends Object implements ValueProvider<MetricData, Double> {
    private String metricName;

    public MetricValueProvider(String metricName) {
        this.metricName = metricName;
    }

    @Override
    public Double getValue(MetricData m) {
        if (metricName != null && metricName.equals(m.getLongDesc()))
            return m.getMetricValue();
        else
            return null;
    }

    @Override
    public void setValue(MetricData m, Double value) {
    }

    @Override
    public String getPath() {
        return null;
    }
}
person dpepper    schedule 25.05.2012
comment
Похоже, что для этой проблемы нет рекомендуемого решения, по крайней мере, в текущем выпуске 3.0. Я разместил тот же вопрос на форумах Sencha Q&A, но я не видел никаких других ответов от члена сообщества или команды разработчиков Sencha. Хотя это, вероятно, не самый желательный способ, это жизнеспособное решение, поэтому я отмечаю его как ответ. Спасибо за ответ! - person Bionic_Geek; 30.05.2012