【发布时间】:2016-04-22 10:47:06
【问题描述】:
我正在使用 D3 日历热图库,cal-heatmap。
我在 GitHub 上托管了一个 external JSON 文件,我通过 jQuery .getJSON 回调函数获取该文件。我正在使用 cal-heatmap 将 JSON 文件中的原始数据解析为 format compatible。
数据被解析和转换得很好,但它没有被加载到日历中。我尝试使用各种 cal-heatmap afterLoad 和 afterLoadData 事件来加载数据,但数据仍然没有显示。
我在JSbin 上有一份该项目的副本。
// global data variable
var data = null;
// Convert running log JSON data into readable format for heatmap calendar
function convertRunningLog() {
// set get URL
var json_url = "https://raw.githubusercontent.com/kylesb/static/master/JSON/running_log.json";
// declare object variable
var ob = {};
// Get running log file from repository
$.getJSON(json_url, function(result){
// for each data entry
for (var i = 0; i < result.data.length; i++) {
// get date and miles
var apoche = date_to_epoch(result['data'][i]['date']).toString();
var miles = parseFloat(result['data'][i]['miles']);
// set date and miles
ob[apoche.toString()] = miles;
}
var json_string = JSON.stringify(ob);
data = JSON.parse(json_string);
console.log(data);
return data;
});
}
// Convert strings to date objects
function date_to_epoch(key) {
var epoch_seconds = new Date(key).getTime();
return Math.floor (epoch_seconds / 1000);
}
// initilize the calendar
// ------------------------
var cal = new CalHeatMap();
cal.init({
itemSelector: "#cal",
domain: "month",
subDomain: "x_day",
data: convertRunningLog(),
start: new Date(2016, 0, 5),
cellSize: 20,
cellPadding: 5,
domainGutter: 20,
range: 1,
domainDynamicDimension: false,
previousSelector: "#example-g-PreviousDomain-selector",
nextSelector: "#example-g-NextDomain-selector",
subDomainTextFormat: "%d",
legend: [0.5, 1, 1.5, 2]
});
【问题讨论】:
标签: javascript json d3.js cal-heatmap