一个COMBOCHART,通过控制和仪表板进行控制

one COMBOCHART that control by Controls and dashboards

本文关键字:控制 仪表板 COMBOCHART 一个      更新时间:2023-09-26

我可以看到我的(var control=new google.visionation.ControlWrapper({controlType:'ChartRangeFilter',containerId:'control',),但我看不到我的(varComboChart=new google.Visionation.SchartWrapperUne chaîne vide aététransmiseà«getElementById())

这是我的代码:

!function($) { 
    //google.load('visualization', '1.0', {'packages':['table']});
    google.load('visualization', '1', {packages: ['corechart']});
    google.load('visualization', '1.1', {packages: ['controls']});
    google.setOnLoadCallback(initialize);

    function populateSelectWithOptions(target, data)
    {
        console.log(data, typeof(data));
        var $select =$("#"+target);
        $select.empty();
        for(var i=0; i <data.length;i++){
        $select.append($("<option>").attr("value", data[i]).text(data[i]));
        }
        $select.prop('disabled', false);
        $select.change(function (){
            var e = document.getElementById("groupe");
            var strUser = e.options[e.selectedIndex].value;
            //alert(strUser);
            sendQuery(strUser)
        });
        // baraie inke vaghti bara avalin bar safe lod mishavad dar chekbox chizi vojod dashte bashad
        $select.trigger('change');
        //console.log(populateSelectWithOptions(target, data));
        };

       function sendQuery(cityName) {
            // You can manipulate the variable response
            // Success!  
          var query = new google.visualization.Query('http://api.XXX.com/XXX/datasource?table='+cityName);
          query.setQuery("select (cost_reportings_timestamp), sum (cost_reportings_cost) group by (cost_reportings_timestamp)  pivot ecoadmin_zone_name");
            //Send the query with a callback function.
          query.send(drawChart);
        //console.log(response);
        }

       function drawChart(response) {
             if (response.isError()) {
             alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
             return;
        }   
             var data = response.getDataTable();
             console.log(data);
             var control = new google.visualization.ControlWrapper({
                    controlType: 'ChartRangeFilter',
                    containerId: 'control',
                    options: {
                        // Filter by the date axis.
                        filterColumnLabel: 'cost_reportings_timestamp',
                        ui: {
                            chartType: 'LineChart',
                            chartOptions: {
                                chartArea: {
                                    width: '90%'
                                },
                                hAxis: {
                                    baselineColor: 'none'
                                }
                            },
                            // Display a single series that shows the closing value of the stock.
                            // Thus, this view has two columns: the date (axis) and the stock value (line series).
                            chartView: {
                                columns: [0,1]
                            }
                        }
                    },
                    //Initial range: 2010 to 2021
                    state: {
                        range: {
                            start: new Date(2012),
                            end: new Date(2019)
                        }
                    }
                })
             // Define a bar chart
                var ComboChart = new google.visualization.ChartWrapper({
                    chartType: 'ComboChart',
                    containerId: 'ComboChart',
                    options: {
                        width: 400,
                        height: 300,
                        seriesType: 'bars',
                        isStacked:'True',
                        hAxis: {
                            minValue: 0,
                            maxValue: 60
                        },
                        chartArea: {
                            top: 0,
                            right: 0,
                            bottom: 0
                        },
                    },
                    view: {columns: [0, 1, 2, 3]}
                });
             // Create the dashboard.    
                var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard')).
                // Configure the slider to affect the bar chart
                bind([control], [ComboChart]).
                // Draw the dashboard
                draw(data);


       } 
        function initialize() {
            var $newDiv = $('<div>').attr('id','ComboChart');            
            $('#ComboChart').append($newDiv);
            $($newDiv).hide();  //hide the div here
            // Replace the data source URL on next line with your data source URL.
            // Specify that we want to use the XmlHttpRequest object to make the query.
            getTable();
        } 
             // baraie inke vaghti ro elemenha click mikonim piecharto ieshon bede
            $("#groupe").change( function () {
            $('#ComboChart').toggle(); //If it is visible hide it or vice versa
              //..
        });
    function getTable() {
            $.getJSON('call/json/mytables', {}, function (response){
            console.log(response);
            populateSelectWithOptions("groupe", response);
        })
        }
}(jQuery);

这似乎与Google Visualization API论坛上发布的问题重复(此处),但对于StackOverflow人群,以下是我的回应:

我在这里看到了一些潜在的问题:

  1. 您正在用选项填充<select>元素,然后立即启动"更改"事件处理程序,该事件处理程序预计会有一个选定的<option>,但您没有设置默认的选定选项,因此这将返回null(或未定义,或出错,具体取决于浏览器的挑剔程度)
  2. 您正在创建一个id为"ComboChart"的新div,并将其附加到id为"comoChart"的div中。如果"ComboChart"已经存在,则表示您违反了要求元素具有唯一ID的HTML规则(这可能会导致此问题);如果"ComboChart"还不存在,那么您就无法将新的div附加到DOM中,因此图表无处绘制
  3. 可视化API在加载到另一个函数调用中时存在问题。将google.loadgoogle.setOnLoadCallback调用置于任何其他函数之外以确保安全
  4. 您正在尝试加载可视化API两次:

    google.load('visualization', '1', {packages: ['corechart']});
    google.load('visualization', '1.1', {packages: ['controls']});
    

    当你应该只加载一次。您需要"控件"包来使用仪表板功能、ControlWrappers和ChartWrappers;除非您有使用候选版本的特定需求,否则您应该加载版本1:

    google.load('visualization', '1', {packages: ['controls']});