在Highcharts下载/上下文按钮中添加了重复选项

时间:2015-10-20 20:51:45

标签: button highcharts download

我在Highcharts中为我的下载/导出/上下文按钮添加了一些选项。但是,这个过程有点复杂,因为它可以作为API使用。一个文件正在接收调用,正在调用另一个文件,其中正在生成图形的所有选项,它将返回到生成图形的第一个文件。在这里,附加选项被引入上下文按钮:

    function drawGraph(selectedID, selectedCountries, selectedYears, per_capita, graphBorder, graphSource, graphDefinition, graphStyle, graphXAxis, renderToGraph, renderToDescription)
    {
        jQuery(document).ready(function() {
            var options = {};               

            url = "xxx.com";

            jQuery.getJSON(url, {selectedCountries: selectedCountries , selectedID: selectedID, selectedYears: selectedYears, per_capita: per_capita, graphBorder: graphBorder, graphSource: graphSource, graphDefinition: graphDefinition, graphStyle: graphStyle, graphXAxis: graphXAxis, renderToGraph: renderToGraph, type: "jsonp"})
            .done(function(data)
            {
                //console.log(data);

                options.chart       = data["chart"];
                options.tooltip     = data["tooltip"];
                options.series      = data["series"];
                options.title       = data["title"];
                options.subtitle    = data["subtitle"];
                options.yAxis       = data["yAxis"];
                options.xAxis       = data["xAxis"];
                options.legend      = data["legend"];
                options.exporting   = data["exporting"];
                options.plotOptions = data["plotOptions"];
                options.credits     = data["credits"];

                if ((graphDefinition == "true") || (graphDefinition == "on"))
                {
                    jQuery('#'+renderToDescription).html(data["description"]);
                }

                var chart = new Highcharts.Chart(options);

            })


            var buttons = Highcharts.getOptions().exporting.buttons.contextButton.menuItems;                

            // add "separator line" 
            buttons.push({
                separator: true,
            });


            // add "Link to metadata"
            buttons.push({
                text: 'Metadata',
                onclick: function () {
                    window.open('http://xxx/metadata.php?selectedID=' + selectedID + '&selectedDatasettype=1', "_blank");
                }
            }); 
            }


            // add "separator line" 
            buttons.push({
                separator: true,
            });


            // add "Link to more data functions"
            buttons.push({
                text: 'Link to more data functions',
                onclick: function () {
                    window.open('http://xxx/options.php?selectedID=' + selectedID + '&selectedDatasettype=1', "_blank");
                }
            }); 
        });
    }

从另一端,我有生成JSON代码的文件:

$data_ = array( "chart"         => array("renderTo" => $container, "type" => $graphStyle, "zoomType" => "xy", "marginTop" => $marginTop, "marginRight" => 20, "marginBottom" => 60, "marginLeft" => 80), 

                "title"         => array("useHTML" => true, "text" => "<div style='text-align: center'>".str_replace("CO2", "CO<sub>2</sub>", $selectedDataset -> name)."</div>", "align" => "center", "style" => array("fontFamily" => "Helvetica", "fontSize" => "20px")), 

                "subtitle"      => array("text" => "Original data source: <a href='" . $provider_url . "' style='font-family: Helvetica; color: #428bcc; text-decoration: none' target='_blank'>" . $selectedDataset -> data_provider . "</a>", "useHTML" => true), 

                "xAxis"         => array("tickWidth" => 0, "showFirstLabel" => true, "showLastLabel" => true, "tickInterval" => $step), 

                "yAxis"         => array("min" => $min, "title" => array("useHTML" => true, "text" => str_replace("CO2", "CO<sub>2</sub>", $yTitle), "fontWeight" => "bold", "align" => "high", "textAlign" => "left", "rotation" => 0, "y" => $yAxisY)), 

                "legend"        => array("enabled" => $flagValues, "layout" => "vertical", "align" => "center", "verticalAlign" => "middle", "backgroundColor" => "#efefef", "borderWidth" => 0, "floating" => false, "x" => -185, "y" => 100, "title" => array("text" => ":: Legend ::"), "floating" => true, "draggable" => true, "zIndex" => 20), 

                "plotOptions"   => array("series" => array("connectNulls" => true, "shadow" => false, "lineWidth" => 2, "marker" => array("enabled" => false))), 

                "tooltip"       => array("shared" => true, "crosshairs" => true), 

                "credits"       => array("text" => $copyright, "href" => "http://ede.grid.unep.ch", "position" => array("x" => 10, "y" => -20, "align" => "left"), "style" => array("fontSize" => "9px", "lineHeight" => "9px")), 

                "exporting"     => array("buttons" => array("contextButton" => array("symbol" => "url(http://geodata.grid.unep.ch/images/button_download_4.png)", "x" => -10, "y" => 10))),

                "series"        => $data,

                "protected"     => $selectedDataset -> protected_,

                "description"   => $selectedDataset -> abstract,

                "noData"        => $flagValues);

header("content-type: application/json"); 

echo $_GET['callback']. '('. json_encode($data_) . ')';    

现在,奇怪的是,似乎如果来自同一站点的用户选择一个接一个的图形,则会添加其他上下文项目。因此,第一个调用,分隔符行和元数据链接正在添加;对于第二个调用,我看到分隔符行和元数据的链接两次......非常奇怪。没有线索。 一想法:contextButtons可以先为每次调用清空吗?然后添加了其他选项?像

这样的东西
Highcharts.getOptions().exporting.buttons.contextButton.menuItems.empty()

感谢任何提示。

1 个答案:

答案 0 :(得分:0)

我终于找到了一种似乎运作良好的方法。这是循环contextButton的menuItem数组。检查项目是否已存在,替换其功能。否则,请使用标准推送选项。

希望这可以帮助处于类似情况的其他人。

    var buttons = [];
    buttons = Highcharts.getOptions().exporting.buttons.contextButton.menuItems;

    flag_metadata = false;
    flag_link_functions = false;

    for (var x in Highcharts.getOptions().exporting.buttons.contextButton.menuItems) 
    {
        if (buttons[x].id == "Metadata")
        {
            buttons[x].onclick = function () {
                window.open('http://ede.grid.unep.ch/mod_metadata/metadata.php?selectedID=' + selectedID + '&selectedDatasettype=1', "_blank");}

            flag_metadata = true;
        }

        if (buttons[x].id == "Link")
        {
            buttons[x].onclick = function () {
                window.open('http://ede.grid.unep.ch/options.php?selectedID=' + selectedID + '&selectedDatasettype=1', "_blank");}

            flag_metadata = true;
        }
    }


    if (flag_metadata == false)
    {                                       
        // add "separator line" 
        Highcharts.getOptions().exporting.buttons.contextButton.menuItems.push({
            separator: true,
            id: 'sep1',
        });


        // add "Link to metadata"
        Highcharts.getOptions().exporting.buttons.contextButton.menuItems.push({
            id: 'Metadata',
            text: 'Metadata',
            onclick: function () {
                window.open('http://ede.grid.unep.ch/mod_metadata/metadata.php?selectedID=' + selectedID + '&selectedDatasettype=1', "_blank");
            }
        }); 


        // add "separator line" 
        Highcharts.getOptions().exporting.buttons.contextButton.menuItems.push({
            separator: true,
            id: 'sep2',
        });


        // add "Link to more data functions"
        Highcharts.getOptions().exporting.buttons.contextButton.menuItems.push({
            id: 'Link',
            text: 'Link to more data functions',
            onclick: function () {
                window.open('http://ede.grid.unep.ch/options.php?selectedID=' + selectedID + '&selectedDatasettype=1', "_blank");
            }
        }); 
    }