amchart - 将参数传递给属性/跨图形重用属性/在多个图形中使用相同的属性

时间:2015-08-29 06:53:58

标签: javascript jquery ajax json amcharts

这是我用来绘制折线图的代码。

return teks.split(""
            + "((?<=\\ )|(?=\\ ))|"
            + "((?<=\\!)|(?=\\!))|"
            + "((?<=\\√\\()|(?=\\√\\())|"    //this is my problem
            + "((?<=\\√)|(?=\\√))|"          //and this
            + "((?<=\\∛)|(?=\\∛))|"
            + "((?<=\\/)|(?=\\|))"
            + "((?<=\\&)|(?=\\&))"
            + "");
}

我想

  1. 创建一个单独的javascript文件,其中包含为每个行,饼图,条形图等类型的图形定义的属性。导入该javascript文件
  2. 替换它:

    var db_query = <?php echo json_encode($db_query_1) ?>;
    var chart;
    var graph;
    
    /* chart initialization */
    var chart = AmCharts.makeChart("plot1", {
        type: "serial",
        categoryField: "OCCUR_DATE",
        graphs: [{
            type: "smoothedLine",
            theme: "light",
            valueField: "FREQ"
        }]
    })
    
    $.ajax({
        type: 'POST',       
        url: "mySQL.php",
        data: {'db_que': db_query},
        dataType: 'html',
        context: document.body,
        global: false,
        async:true,
        success: function(data) {
            //alert(data);
            chart.dataProvider = eval(data);
            chart.validateNow();
        }
    });
    

    var chart = AmCharts.makeChart("plot1", {
        type: "serial",
        categoryField: "OCCUR_DATE",
        graphs: [{
            type: "smoothedLine",
            theme: "light",
            valueField: "FREQ"
        }]
    })
    
  3. 我希望能够将参数传递给的属性 x轴和y轴标题&amp;图形名称。这些至少是非常的 我现在能想到的几个可变参数。如果我能做到这一点, 我可以轻松地添加更多可变参数。

  4. 我在这里寻求帮助的原因是,我有超过30个折线图,20个饼图和&amp;我将绘制的一些其他类型。在&amp;上设置相同的属性集再一次听起来是一种低效的做事方式。

    有人可以指导/帮助我吗?

2 个答案:

答案 0 :(得分:3)

  1. 只需创建一个JavaScript文件,将默认配置声明为变量。例如:。

    var defaultPlotConfig = {
        /* amCharts configuration object */
    }
    

    并将其插入您的html 之前创建图表

    <script src="defaults.js"></script>
    
  2. 我假设您使用jQuery即可(您的请求已在使用它)
    您必须为配置对象制作一份深层副本。
    jQuery.extend()让这一切变得非常简单(您将在第3点看到,为什么我会使用它。)
    该方法返回参数中传递的对象的合并对象。你要做的是:

    var plotChart1 = AmCharts.makeChart("plot1", $.extend({}, defaultPlotConfig));
    

    重要提示:第一个参数必须是新对象{},因为它是返回的对象。

  3. 使用extend()方法,您可以合并多个对象。参数中的最后一个对象具有优先级。您所要做的就是:

    var plotChart1 = AmCharts.makeChart("plot1",
        $.extend({}, defaultPlotConfig, {
            /* these will overwrite the defaults */
            categoryAxis: {
                title: "x axis title"
            }
        })
    );
    

答案 1 :(得分:2)

图表实例重新使用您传入的对象作为配置,因此,当然,您无法将同一对象传递给多个图表。

但是,您可以做的是在应用修改并传入图表实例之前传递重复的配置对象。

this SO thread中有一个很好的对象克隆功能。

所以基本上你可以这样做:

// define universal config
var universalConfig = {...};

// clone universalConfig
var instanceConfig1 = clone(universalConfig);

// make modifications
instaceConfig1.categoryField = "OCCUR_DATE";

// create the chart
var chart = AmCharts.makeChart("plot1", instaceConfig1);

// repeat
// ...

这是working example on CodePen