Мы пытаемся создать страницу Visualforce, которая будет содержать график, отображающий данные бюджета. В целях тестирования я хочу отобразить 3 столбца, как определено в приведенном ниже коде.
Выполнение запроса в классе apex из редактора дает ожидаемые результаты. Только график отказывается отображать данные.
В консоли проверки компонентов предусмотрена следующая ошибка: BudgetGraph? Core.apexpages.request.devconsole = 1: 34 Uncaught (в обещании) TypeError: Cannot читать свойство 'длина' из undefined в drawChart (BudgetGraph? core.apexpages.request.devconsole = 1: 34)
Я действительно не могу разобраться с этим простым ...
Страница Visual Force (раздел заголовка):
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
// Load Google Chart
google.charts.load('current', {'packages':['line']});
google.charts.setOnLoadCallback(drawChart);
var bdgtData; //Variable to store data
// Call remote action method
BudgetGraphController.getBudgetData(function(result, event){
bdgtData = result; //get data from Apex controller
},{escape:true});
// Draw Google chart
function drawChart() {
//Create the data table
var data = new google.visualization.DataTable();
data.addColumn('string', 'Timing');
data.addColumn('string', 'Budget Engineering');
data.addColumn('string', 'Budget PM');
//Add datatable rows
for(i = 0; i< bdgtData.length; i++){
data.addRow([bdgtData[i].Timing__c, bdgtData[i].Budget_Engineering__c, bdgtData[i].Budget_Project_Management__c]);
}
var options = {
title: 'Project Budget',
curveType: 'function',
legend: { position: 'bottom' }
};
var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
chart.draw(data, google.charts.Line.convertOptions(options));
}
</script>
Класс Apex (контроллер):
global with sharing class BudgetGraphController {
@RemoteAction
global static List<Budget__c> getBudgetData(){
List<Budget__c> bdgtGroupList = [Select Timing__c, Budget_Engineering__c, Budget_Project_Management__c From Budget__c ORDER BY Timing__c ASC];
return bdgtGroupList;
}