Emberjs and Highcharts

|

Let’s write a reusable ember view for rendering graphs and charts powered by highcharts.

    App.HighChartsView = Ember.View.extend
      tagName: 'div'
      classNames: [ 'highcharts' ]
      chartConfig = {}

      setConfig: (type)->
        config = {
          chart:
            type: type
          title:
            text: @title || 'Highcharts'
          xAxis:
            categories: @dataset.categories || []
          yAxis:
              title:
                text: @yAxisTitle
          series: @series()
        }
        # Merge highcharts config if it is present
        Ember.merge(config, @highChartConfig) if @highChartConfig
        @set('chartConfig', config)

      series: ->
        @dataset.data

      prepareConfig: ->
        # if custom config is present then directly set it to chartConfig
        if @customHighChartConfig
          @set('chartConfig', @customHighChartConfig)
        else
          type = @type || 'line'
          @setConfig(type)

      didInsertElement: ->
        @prepareConfig()
        @renderHighchart()

      renderHighchart: ->
        @$().highcharts(@chartConfig)

Usage:

  {{ view App.HighChartsView dataset=dataset title="Sample Analytics" type="line" yAxisTitle='Temperature C' }}

Th dataset can be set at controller or may be at route.

  App.IndexController = Ember.ArrayController.extend
    dataset: {
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
      data: [{
                name: 'Tokyo',
                data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
            }, {
                name: 'New York',
                data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
            }, {
                name: 'Berlin',
                data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
            }, {
                name: 'London',
                data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
            }]
      }

Usage with control over config

  {{ view App.HighChartsView dataset=dataset highChartConfig=highChartConfig title="Sample Analytics" type="line" }}
  App.IndexController = Ember.ArrayController.extend
    highChartConfig: {
      yAxis: {
        title: {
            text: 'Temperature (°C)'
        },
        plotLines: [{
            value: 0,
            width: 1,
            color: '#808080'
        }]
      },
      tooltip: {
          valueSuffix: '°C'
        }
      }

Comments