我正在加载在AmCharts插件中工作的JSON,但是我无法使用外部JSON和股票图表。我在这里使用此示例中的代码:https://www.amcharts.com/kbase/automatically-generate-series-graphs-data-stock-chart/
我正在使用下面的dataLoader配置:
"dataLoader": {
"url": "data/MSFT.json",
"format": "json",
"showCurtain": true,
"showErrors": true,
"async": true
}
当我的数据直接在dataProvider中作为静态JSON提供但不使用dataLoader时,插件可以正常工作。
答案 0 :(得分:0)
您链接的插件并非设计用于数据加载器,但是您可以通过将主要逻辑包装到datePadding plugin来执行一些微小调整以使其更好地使用它一个可以稍后调用的函数,然后在将调用附加到dataLoader的完整回调之前添加一些代码来检查dataLoader是否存在:
AmCharts.addInitHandler(function(chart) {
function generateGraphsFromSeries(chart) {
//original logic here
}
//determine whether the dataloader is used or not
/**
* Stock or Serial chart?
*/
if ( chart.type === "stock" ) {
// check each data set if there's a Data Loader active
var loader;
for ( var i = 0; i < chart.dataSets.length; i++ ) {
if ( chart.dataSets[ i ].dataLoader !== undefined && chart.dataSets[ i ].dataLoader.url !== undefined ) {
loader = chart.dataSets[ i ].dataLoader;
}
}
// is there at least one data loader?
if ( loader === undefined ) {
// nope - let's go with processing
generateGraphsFromSeries( chart );
} else {
// yeah - let's use the last data loader's complete event
if ( loader.complete ) {
loader._complete = loader.complete;
}
loader.complete = function( chart ) {
// call original complete
if ( loader._complete )
loader._complete.call( this, chart );
// now let's do our thing
generateGraphsFromSeries( chart );
}
}
} else if ( chart.stockChart === undefined && chart.id !== "scrollbarChart" ) {
// check for Data Loader
var loader = chart.dataLoader;
if ( loader !== undefined && loader.url !== undefined ) {
if ( loader.complete ) {
loader._complete = loader.complete;
}
loader.complete = function( chart ) {
// call original complete
if ( loader._complete )
loader._complete.call( this, chart );
// now let's do our thing
generateGraphsFromSeries( chart );
}
} else {
generateGraphsFromSeries( chart );
}
}
}, ["serial", "stock"]);
这里有updated demo,演示了如何使用外部JSON文件。
另请注意,股票图表期望dataLoader位于dataSets数组中的dataSet
对象内,与串行图表不同:
AmCharts.makeChart("...", {
type: stock,
// ...
dataSets: [{
dataLoader: {
// config
},
//rest of the config here.
},
// repeat for each dataSet
],
// ...
});