javascript - 模块模式内的 Google 图表

标签 javascript google-visualization module-pattern

我正在尝试制作一个图表模块,以避免每次我想创建图表时都重复自己。当我尝试获取模块的多个实例时,问题就出现了。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="jquery.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
</head>
<body>
    <div id="ex0"></div>

    <script type="text/javascript">

        $(document).ready(function() {

            var options = {
                width: 500,
                height: 100,
                hAxis: {
                  title: 'Time'
                },
                vAxis: {
                  title: 'Popularity'
                }
            };

            var columns = [
                {
                    'type': 'number',
                    'value': 'X'
                },
                {
                    'type': 'number',
                    'value': 'Dogs'
                }
            ]

            var data = [
                    [0, 0],   [1, 10],  [2, 23],
                    [3, 17],  [4, 18],  [5, 9],
                    [6, 11],  [7, 27],  [8, 33],
                    [9, 40],  [10, 32], [11, 35],
                    [12, 30], [13, 40], [14, 42],
                    [15, 47], [16, 44], [17, 48]
                ];

            var chart1 = new Front_google_charts('ex0', columns, options, data);

            chart1.init();

        });

        var Front_google_charts = (function() {

            var htmlElement = null;
            var columns = null;
            var options = null;
            var rowsContent = null;

            function chart(e, c, o, r) {
                google.load('visualization', '1', { packages: ['corechart'] });
                google.setOnLoadCallback(this.drawChart);

                this.htmlElement = e;
                this.columns = c;
                this.options = o;
                this.rowsContent = r;
            }

            chart.prototype.setData = function() {
                var data = new google.visualization.DataTable();

                for (var i = 0; i < this.columns.length; i++) {
                    data.addColumn(this.columns[i].type, this.columns[i].value);
                }

                return data;
            }

            chart.prototype.drawChart = function() {
                var data = setData();
                data.addRows(rowsContent);
                var chart = new google.visualization.LineChart(document.getElementById(htmlElement));
                chart.draw(data, options);
            }

            chart.prototype = {

                init: function() {
                    this.drawChart();
                    return this;
                },

                setSettings: function(e, c, o) {
                    columns = c;
                    htmlElement = e;
                    options = o;
                },

                setRowsContent: function(rows) {
                    rowsContent = rows;
                }
            };

            return chart;

        })();
    </script>

</body>
</html>

如何将 google 图表功能封装在模块内?有可能吗? 提前致谢

最佳答案

您可以通过以下方式在模块中插入对象:

(function() {

ObjectToInsert.doSomething();

})(ObjectToInsert);

此外,这还将提高性能,因为 JavaScript 解释器将在模块上下文中查找 doSomething 方法。

<小时/>

来源:

  1. Professional JavaScript fow Web Developers - 尼古拉斯·C·扎卡斯
  2. High Performance JavaScript - 尼古拉斯·C·扎卡斯

关于javascript - 模块模式内的 Google 图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823397/

相关文章:

JavaScript 与 Form Select 的关系

javascript - 在谷歌图表中显示 json 正文

javascript - 这个模块片段有什么问题?

javascript - rxjs 中棘手的 Steam 可观察合并

javascript - jQuery "for"循环

css - 谷歌图表 : How to add class to column of table?

javascript - 如何从 JavaScript 模块模式中的私有(private)函数中调用公共(public)函数

javascript - mapbox.js - 无法初始化 map ,除非它在全局范围内可用

javascript - 在 JavaScript 中按键时从多个文本框中获取值

javascript - 转换 Google Chart 数据表的 JSON 数据