0

Sencha GXT 3.0を使用すると、折れ線グラフを生成して、動的な数の線系列フィールドを入力することができます。その場合、推奨される方法は何ですか。

複数の系列フィールドをグラフに追加できることは知っていますが、折れ線グラフの例(およびその他のグラフの例)は、拡張するインターフェイスを使用し、インターフェイスPropertyAccess<?>は予想されるフィールドの静的な数を指定します(たとえば、data1()、 data2()、data3()など)。グラフに追加するフィールドを指定するためにインターフェイスを使用する場合、n個のフィールド(つまり、特定のグラフのn個の線系列)を必要とする可能性のあるグラフをどのように説明できますか。

Senchaのサイトで提供されている例:

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

4

1 に答える 1

0

私は同じ問題に遭遇しました。チャートごとに1つの店舗を用意するのではなく、各シリーズに店舗を設けると、はるかに優れたデザインになります。

metricDataStoreにメトリック値の長いリストが1つありました。各メトリック値には説明があります。1つの(そして1つだけの)シリーズに同じ説明を持つすべてのメトリック値を表示したかったのです。値がシリーズに含まれるはずがない場合、各シリーズの値プロバイダーがx軸とy軸の両方でnullを返すようにしました。

これは私にはハックのように見えますが、私の使用法では機能します。

    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;
    }
}
于 2012-05-25T10:46:42.267 に答える