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

Javascript amchart-将参数传递给属性/跨图重用属性/跨多个图使用相同的属性,javascript,jquery,ajax,json,amcharts,Javascript,Jquery,Ajax,Json,Amcharts,这是我用来绘制线图的代码 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: "s

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

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();
    }
});

  • 我希望能够将参数传递给 x轴和y轴标题以及图形名称。这些至少是最重要的 我现在能想到的可变参数很少。如果我能做到这一点, 我想,添加更多可变参数可能很容易

  • 我在这里寻求帮助的原因是,我有30多个折线图,20个饼图&我将绘制一些其他类型的图。反复设置同一组属性听起来是一种低效的做法


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

    图表实例将您传入的对象重新用作配置,因此,很自然,您不能将同一个对象传入多个图表

    不过,您可以做的是在应用修改并传入图表实例之前传入复制的config对象

    中有一个很好的对象克隆功能

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

    // 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
    // ...
    

    这是一个。

    图表实例将您传入的对象作为配置重用,因此,很自然,您不能将同一个对象传入多个图表

    不过,您可以做的是在应用修改并传入图表实例之前传入复制的config对象

    中有一个很好的对象克隆功能

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

    // 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
    // ...
    
    这是一个例子

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

    var defaultPlotConfig = {
        /* amCharts configuration object */
    }
    
    并在创建图表之前将它们插入html

    <script src="defaults.js"></script>
    
    重要提示:第一个参数必须是新对象
    {}
    ,因为它是返回的对象

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

    var plotChart1 = AmCharts.makeChart("plot1", $.extend({}, defaultPlotConfig));
    
    var plotChart1 = AmCharts.makeChart("plot1",
        $.extend({}, defaultPlotConfig, {
            /* these will overwrite the defaults */
            categoryAxis: {
                title: "x axis title"
            }
        })
    );
    
  • 只需创建一个JavaScript文件,将默认配置声明为变量。
    例如:

    var defaultPlotConfig = {
        /* amCharts configuration object */
    }
    
    并在创建图表之前将它们插入html

    <script src="defaults.js"></script>
    
    重要提示:第一个参数必须是新对象
    {}
    ,因为它是返回的对象

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

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

  • 请注意,
    extend()
    只会复制对象的第一层。数组(例如,
    图形的数组)将不会合并。有关更多信息,请阅读。要解决这个问题,您必须稍后分配数组值,或者看看martynasma是如何解决的。您好Gerric-非常感谢。我在别处也使用了你的答案和想法。再次感谢你。你好,Gerric-如果我被证明是一个痛苦的人,我道歉。你能帮我解决另一个通过循环生成图表的问题吗?请注意,
    extend()
    只会复制对象的第一层。数组(例如,
    图形的数组)将不会合并。有关更多信息,请阅读。要解决这个问题,您必须稍后分配数组值,或者看看martynasma是如何解决的。您好Gerric-非常感谢。我在别处也使用了你的答案和想法。再次感谢你。你好,Gerric-如果我被证明是一个痛苦的人,我道歉。你能帮我解决另一个通过循环生成图表的问题吗?我已经把问题发到了——你好,马丁——非常感谢。这很有帮助。你好,Martyn-如果我觉得很烦人,请道歉。你能帮我解决另一个通过循环生成图表的问题吗?我已经把问题发到了——你好,马丁——非常感谢。这很有帮助。你好,Martyn-如果我觉得很烦人,请道歉。你能帮我解决另一个通过循环生成图表的问题吗?已将问题发布在-