Фильтр категории визуализации Google

Я сделал панель инструментов с визуализацией Google. На моей панели инструментов есть таблица, которая рисуется с помощью ChartWrapper, и я фильтрую таблицу по одному из столбцов с помощью фильтра категорий. У меня также есть событие выбора, когда при выборе одной из строк в отфильтрованной таблице появляется вторая таблица. Моя проблема в том, что после фильтрации таблицы и щелчка по одной из строк во второй таблице нет правильной информации. Кажется, что все строки в отфильтрованной таблице получают свое значение из первой нефильтрованной строки. У вас есть идеи, как я могу получить обновленные данные в отфильтрованной таблице и использовать событие выбора? Следующее является частью моего кода:

function drawDashboard() {

    dataUrl = $("#site_promotion_summary")[0].attributes["data-google-chart-url"].value;
    hip_get_dataTable(dataUrl, function (response) {
        var dataTable = response.getDataTable();

        // Define a category picker control for the SiteTypeName column
        var categoryPicker = new google.visualization.ControlWrapper({
            'controlType': 'CategoryFilter',
            'containerId': 'category_picker',
            'options': {
                'filterColumnLabel': 'SiteTypeName',
                'ui': {
                    'labelStacking': 'vertical',
                    'allowTyping': false,
                    'allowMultiple': false
                }
            }
        });

        var table = new google.visualization.ChartWrapper({
            'chartType': 'Table',
            'containerId': 'site_promotion_summary',
            //'dataTable': dataTable,
            'view': { 'columns': [0, 1, 4, 5, 6, 7, 8, 9] }
        });
var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard')).bind(categoryPicker, table).draw(dataTable);

        //Select event   
        google.visualization.events.addListener(table, 'select', function () {
            var selection = table.getChart().getSelection();
            for (var i = 0; i < selection.length; i++) {
                var item = selection[i];
                var promos = dataTable.getValue(item.row, 3);

                if (item.row != null && promos >= 2) {
                    var str = dataTable.getValue(item.row, 0);
                    var selectedSiteId = dataTable.getValue(item.row, 2);
                    var selectedRowPosition = $(".google-visualization-table-tr-sel").position();
                    drawDetail(selectedSiteId, selectedRowPosition.top + 190);

                }

            }
 });
    });
 }

function drawDetail(siteId, positionTop) {
    dataUrl = $("#detail_table")[0].attributes["data-google-chart-url"].value;
    var dataUrlFormatted = dataUrl.replace("{0}", siteId);
    hip_get_dataTable(dataUrlFormatted, function (response) {
        var dataTable = response.getDataTable();
        var table = new google.visualization.ChartWrapper({
            'chartType': 'Table',
            'containerId': 'detail_table',
            'dataTable': dataTable,
            'options': { 'width': '800px', 'height': '300px' }

        });

        //format the wholesale and retail columns
        var formatter = new google.visualization.TableNumberFormat(
        { prefix: "$", negativeColor: 'black', negativeParens: true });
        formatter.format(dataTable, 1);
        formatter.format(dataTable, 2);

        //format the orderItemCount column
        var formatter = new google.visualization.TableNumberFormat(
        { groupingSymbol: "," });
        formatter.format(dataTable, 3);

        table.draw();



        $("#detail_table").css({
            position: "absolute",
            top: positionTop + "px",
            left: "400px",
            "background-color": "white"

        }).show();

    });

    $("#detail_table").click(function (event) {
        event.preventDefault();
        $(this).hide();
    });
}

person user1476134    schedule 24.06.2012    source источник
comment
Вы когда-нибудь встречали решение этой проблемы? То же самое происходит и со мной, но с круговой диаграммой вместо таблицы.   -  person Miki de Arcayne    schedule 19.07.2012


Ответы (1)


На выбранном слушателе мы создадим DataView, который содержит отфильтрованные данные:

 var filteredView = table.getDataTable();

Затем вместо использования dataTable в слушателе вы используете filteredView:

 var promos = dataTable.getValue(item.row, 3);
person hesscj    schedule 23.01.2014