У меня есть страница, где я загружаю таблицы и диаграммы. В иерархических сетках и в иерархических диаграммах используется один и тот же вебапис. Итак, я сначала вызываю функцию загрузки сеток, а затем вызываю диаграмму создания после загрузки сеток. Таким образом, данные ajax, возвращаемые из сетки, сохраняются в localStorage и повторно используются в диаграмме.
Сначала я загружаю сетку, и когда она будет завершена, я создаю диаграмму
$.when(CreateGeoGrids()).then(CreateLabelChart());
У меня есть 3 диаграммы и 3 сетки в этом иерархическом порядке - Страна -> Регион -> Территории ( Область Провинция)
И все диаграммы являются столбцовыми диаграммами - выбор столбца страны на диаграмме страны загружает диаграмму региона, а выбор региона на диаграмме региона загружает территории. Для диаграмм я использовал gijgogrids ApexCharts & grid
Все работало нормально, пока я не добавил событие изменения выпадающего списка (Изменить регионы) для изменения последнего графика территории / StateProvince. Итак, я удалил это выпадающее меню &? его события. Тем не менее я получаю эту ошибку
Uncaught TypeError: geoChart.addEventListener не является функцией в двух строках кода
geoChart.addEventListener('dataPointSelection', function (e, chart, opts) {
$.when(CreateGeoGrids()).then(CreateLabelChart());
Эта ошибка в функции диаграммы, Укажите CreateLabelChart c, где я создаю и отображаю как диаграмму страны, так и диаграмму региона. И в этой функции есть четыре addEventListener - по два для страны и региона
События, добавленные через слушателей:
- geoChart.addEventListener ('dataPointSelection', function (e, chart) , opts) {
geoChart - диаграмма страны и событие dataPointSelection добавляется через addEventListener, и здесь выдается ошибка и для всех addEventListener, которые следуют также, если я комментирую этого слушателя. Это событие для выбора столбца щелкнув по столбцу в диаграмме страны, это должно загрузить данные в диаграмму региона для выбранной страны
geoChart.addEventListener ('updated', function (chart) {
Это событие вызывается после загрузки данных в диаграмму региона.
Итак, все эти события для диаграмм addEventListeners предоставляются диаграммами apex на их сайте [Apex dynamici c chart] [1]
Ниже приведен полный код в моем файле JS Sales . js
function CreateGeoGrids() {
var countryGrid, onSuccessFuncForCountry = function (data) {
localStorage.setItem('stackedCountryChartSourceData', JSON.stringify(data));
countryGrid.render(data);
};
countryGrid = $('#countryGrid').grid({
primaryKey: 'CountryId',
dataSource: { url: 'http://localhost:51604/api/Sales/GetSalesByGeo', data: {}, success: onSuccessFuncForCountry },
columns: [
{ field: 'CountryId', hidden: true },
{ field: 'SalesTerritoryCountry', title: 'Country' },
{ field: 'TotalMargin', title: 'Total Margin' }
],
complete: function (data) {
},
detailTemplate: '<div><table id="regGrid"/></div>'
});
countryGrid.on('detailExpand', function (e, $detailWrapper, CountryId) {
regGrid = $detailWrapper.find('table').grid({
params: { CountryId: CountryId },
primaryKey: 'GridRowIndex',
dataSource: 'http://localhost:51604/api/Sales/GetSalesByRegion',
columns: [
{ field: 'ProductCategoryKey', hidden: true },
{ field: 'EnglishProductCategoryName', title: 'Category' },
{ field: 'SalesTerritoryKey', hidden: true },
{ field: 'SalesTerritoryRegion', title: 'Region' },
{ field: 'CalendarYear', title: 'Year' },
{ field: 'Total_Sales', title: 'Total Sales' },
{ field: 'Total_cost', title: 'Total Cost' },
{ field: 'Total_Margin', title: 'Total Margin' }
],
pager: { limit: 5 }
});
countryGrid.on('dataBound', function (e, records, totalRecords) {
stackedCountryChartSourceData = JSON.stringify(records);
});
regGrid.on('dataBound', function (e, records, totalRecords) {
regGrid.setSelected(1);
document.getElementById('stateProvGrid').style.visibility = "visible";
$("#divYear").visibility = "visible";
$("#divRegion").visibility = "visible";
$("#divCategory").visibility = "visible";
defaultCategory = records[0].EnglishProductCategoryName;
defaultRegion = records[0].SalesTerritoryRegion;
defaultYear = records[0].CalendarYear;
$("#selectedRegion").text(defaultCategory);
$("#selectedCategory").text(defaultRegion);
$("#selectedYear").text(defaultYear);
dynamicRegionChartSource = records;
loadGrid(defaultCategory, defaultRegion, defaultYear);
});
regGrid.on('rowSelect', function (e, $row, record) {
var data = regGrid.get(regGrid.getSelected());
$("#selectedRegion").text(data.SalesTerritoryRegion);
$("#selectedCategory").text(data.EnglishProductCategoryName);
$("#selectedYear").text(data.CalendarYear);
stateProvGrid.reload({
EnglishProductCategoryName: data.EnglishProductCategoryName, SalesTerritoryRegion: data.SalesTerritoryRegion,
CalendarYear: data.CalendarYear, page: 1
});
});
});
countryGrid.on('detailCollapse', function (e, $detailWrapper, CountryId) {
$detailWrapper.find('table').grid('destroy', true, true);
document.getElementById('stateProvGrid').style.visibility = "hidden";
$("#divYear").visibility = "hidden";
$("#divRegion").visibility = "hidden";
$("#divCategory").visibility = "hidden";
stateProvGrid('destroy', true, true);
});
}
$.when(CreateGeoGrids()).then(CreateLabelChart());