简体   繁体   English

聚合物模板重复多个图表

[英]Polymer Template Repeat Over Multiple Charts

I have a polymer highcharts element that works: 我有一个聚合物highcharts元素工作:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="bower_components/platform/platform.js"></script>
<link rel="import" href="bower_components/polymer/polymer.html">

<polymer-element name="bar-chart" attributes="source">
    <template>
        <div id="container" style="max-width: 600px; height: 360px;"></div>
    </template>
    <script>
    Polymer("bar-chart", {
        ready: function() {
            var options = {
                chart: {type: 'bar', renderTo: this.$.container},
                title: {text:  ''},
                subtitle: {text: ''},
                xAxis: {categories: []},
                yAxis: {title: {text: ''}},
                plotOptions: {bar: {dataLabels: {enabled: true}}},
                legend: {enabled: false},
                credits: {enabled: false},
                series: [{}]
            };
            $.getJSON(this.source).done(function(chartjson) {
                options.xAxis.categories = chartjson.categories;
                options.series[0].data = chartjson.series;
                options.title.text = chartjson.title;
                options.subtitle.text = chartjson.subtitle;
                options.yAxis.title.text = chartjson.yAxistitle;
                var chart = new Highcharts.Chart(options);
            });
        }
    });
    </script>
</polymer-element>

<bar-chart source="json/grass-roots/2014 Mayor.json"></bar-chart>

I pass it some nice data via the '2014 Mayor.json' file: 我通过'2014 Mayor.json'文件传递了一些不错的数据:

{
    "categories": ["Muriel E Bowser", "Tommy Wells", "Jack Evans", "Vincent C Gray", "David Catania", "Andy Shallal", "Reta Jo Lewis", "Carol Schwartz", "Vincent Orange", "Christian Carter", "Nestor DJonkam", "Bruce Majors", "Michael L Green"],
    "series": [2505, 1654, 1332, 956, 699, 399, 183, 81, 72, 3, 3, 2, 1],
    "title": "Mayor (2014)",
    "subtitle": "Grassroots Contributors",
    "yAxistitle": "Number of DC Residents Contributing to Candidate"
}

And I get a chart. 我得到一张图表。

But what I really want to do is iterate over an array of chart data to produce multiple charts. 但我真正想做的是迭代一组图表数据以生成多个图表。 I've tried very hard to figure out how template repeat works, but I'm new to both Polymer and javascript, and haven't been able to crack it. 我已经非常努力地弄清楚模板重复是如何工作的,但我是Polymer和javascript的新手,并且无法破解它。

Let's say my data file, 'arrayofdata.json' has the following in it: 假设我的数据文件'arrayofdata.json'中包含以下内容:

[
    {
        "categories": ["Phil Mendelson", "Kris Hammond", "John C Cheeks"], "series": [172, 44, 4], 
        "title": "Council Chairman (2014)", 
        "subtitle": "Grassroots Contributors", 
        "yAxistitle": "Number of DC Residents Contributing to Candidate" 
    },
    {
        "categories": ["Muriel E Bowser", "Tommy Wells", "Jack Evans", "Vincent C Gray", "David Catania", "Andy Shallal", "Reta Jo Lewis", "Carol Schwartz", "Vincent Orange", "Christian Carter", "Nestor DJonkam", "Bruce Majors", "Michael L Green"],
        "series": [2505, 1654, 1332, 956, 699, 399, 183, 81, 72, 3, 3, 2, 1],
        "title": "Mayor (2014)",
        "subtitle": "Grassroots Contributors",
        "yAxistitle": "Number of DC Residents Contributing to Candidate"
    }
]

How do I iterate over that to produce multiple charts using template repeat? 如何使用模板重复迭代生成多个图表?

I don't have a solution for Highcharts, but the Polymeric way to do this is to think declaratively. 我没有Highcharts的解决方案,但是这样做的Polymeric方法是以声明的方式思考。 You don't need $.getJSON . 你不需要$.getJSON You need an element like <google-chart> , that declaratively renders a chart from data and <core-ajax> for fetching the json data. 您需要一个像<google-chart>这样的元素,它以声明方式从数据中呈现图表,而<core-ajax>用于获取json数据。

The whole element definition becomes something like: 整个元素定义变得类似于:

<polymer-element name="bar-charts" attributes="source" noscript>
  <template>
    <core-ajax auto url="{{source}} response="{{items}}" handleAs="json"></core-ajax>

    <template repeat="{{item in items}}">
      <google-chart type='pie' height='300px' width='400px'
        options='{{item.options}}' cols='{{item.cols}}'
        rows='{{item.rows}}' data='{{item.data}}'>
      </google-chart>
    </template>
  </template>
</polymer-element>

How wicked is that!? 那是多么邪恶!? No code :) 没有代码:)

The hardest part would be to get the data in the format google-chart expects. 最困难的部分是以谷歌图表期望的格式获取数据。 See <google-chart> element for examples. 有关示例,请参阅<google-chart>元素

I know it's an old question but here's the updated Polymeric 1.0/2.0 way of doing it, using Highcharts-Chart : 我知道这是一个古老的问题,但这里是更新的Polymeric 1.0 / 2.0方式,使用Highcharts-Chart

 <link rel="import" href="bower_components/highcharts-chart/highcharts-chart.html"> <template is="dom-bind" id="app"> <template is="dom-repeat" items="{{dynamicChartData}}" as="e"> <highcharts-chart index$="[[index]]" type="pie" data="[[zip(e.categories,e.series)]]" title="[[e.title]]" subtitle="[[e.subtitle]]" y-label="[[e.yAxistitle]]"></highcharts-chart> </template> <iron-ajax auto url="{{source}}" last-response="{{dynamicChartData}}" handle-as="json"></iron-ajax> </template> <script> var app = document.querySelector("#app") app.source = "Your URL-------------------" app.zip = function(a,b) { return a.map(function (_, i) {return [a[i], b[i]]}) } </script> 

And if you're looking for more examples you can check out http://avdaredevil.github.io/highcharts-chart/ . 如果您正在寻找更多示例,可以查看http://avdaredevil.github.io/highcharts-chart/

我对Polymer不太了解,但是从文档 <template repeat="{{ yourarray }}"><template>更改为<template repeat="{{ yourarray }}">可能是实现这一目标的关键步骤。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM