如何按创建日期对对象进行排序以使用 Meteor 插入高级图表
How to sort objects by creation date to plug into high charts with Meteor
我并没有经常使用仪表板,现在正在为我使用 Meteor 构建的 contest/giveaway 应用程序创建一个仪表板。我正在使用 highcharts 并试图弄清楚如何准确地构建我的数据,以便实时更新图表。这是我的 ContestAnalytics.js 文件:
var category_arr = [moment().subtract(5, 'days').format('MMM D'), moment().subtract(4, 'days').format('MMM D'), moment().subtract(3, 'days').format('MMM D'), moment().subtract(2, 'days').format('MMM D'), moment().subtract(1, 'days').format('MMM D'), moment().format('MMM DD'), moment().add(1, 'days').format('MMM D'), moment().add(2, 'days').format('MMM D'), moment().add(3, 'days').format('MMM D'), moment().add(4, 'days').format('MMM D') ];
function builtArea() {
$('#container-area').highcharts({
title: {
text: 'Entries',
x: -20 //center
},
xAxis: {
categories: category_arr
},
yAxis: {
title: {
text: 'Entries'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
valueSuffix: ''
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [{
name: 'Entries',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3]
}]
});
}
Template.ContestAnalytics.rendered = function () {
var currentContestId = this._id;
var entriesCursor = Entries.find({contest_id: currentContestId});
var entries = [0,0,0,0,0,0,0,0,0,0];
entriesCursor.forEach(function(entry) {
var m = moment(entry.submitted).format('MMM D');
for (var i = 0; i < 10; i++) {
if (category_arr[i] === m) {
entries[i] += 1;
}
}
});
builtArea(entries);
};
如您所见,我使用 Moment.js 在 x 轴上显示 10 天的跨度。我暂时在系列数据中有硬编码值,但我试图弄清楚如何使系列数据动态化。
我有一个条目集合,其中包含 contest_id 和已提交的属性。提交的属性在创建时使用 new Date()
填充。我希望做的是将一个数组插入到具有 10 个值的系列数据中。每个值都是在特定日期创建的条目数的计数。如果您能就如何完成此任务提供任何建议,我将不胜感激。
你可以在这里找到我的仓库:https://github.com/ryanswapp/rymotion
编辑
我只是试图让它与渲染块中的代码一起工作,但没有成功。有什么想法吗?
您可以尝试使用...
var firstSeries = Entries.find({submitted: category_arr[0]});
然后将该变量放入您的系列中...
data: [firstSeries]
当然,如果您走这条路,您将需要设置发布和订阅,以便您的模板可以访问 Entries 集合。
我明白了。为了获取当前模板实例的 ID,我必须使用 Blaze.currentView._templateInstance.data._id
然后我可以访问属于特定比赛的特定日期的所有条目。
Template.ContestAnalytics.rendered = function () {
var currentContestId = Blaze.currentView._templateInstance.data._id;
Tracker.autorun(function() {
var entries = [];
for (var i = 0; i < 10; i++) {
var tempNum = Entries.find({contest_id: currentContestId, submitted_day: category_arr[i] }).count();
entries.push(tempNum);
}
builtArea(entries);
});
};
我并没有经常使用仪表板,现在正在为我使用 Meteor 构建的 contest/giveaway 应用程序创建一个仪表板。我正在使用 highcharts 并试图弄清楚如何准确地构建我的数据,以便实时更新图表。这是我的 ContestAnalytics.js 文件:
var category_arr = [moment().subtract(5, 'days').format('MMM D'), moment().subtract(4, 'days').format('MMM D'), moment().subtract(3, 'days').format('MMM D'), moment().subtract(2, 'days').format('MMM D'), moment().subtract(1, 'days').format('MMM D'), moment().format('MMM DD'), moment().add(1, 'days').format('MMM D'), moment().add(2, 'days').format('MMM D'), moment().add(3, 'days').format('MMM D'), moment().add(4, 'days').format('MMM D') ];
function builtArea() {
$('#container-area').highcharts({
title: {
text: 'Entries',
x: -20 //center
},
xAxis: {
categories: category_arr
},
yAxis: {
title: {
text: 'Entries'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
valueSuffix: ''
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [{
name: 'Entries',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3]
}]
});
}
Template.ContestAnalytics.rendered = function () {
var currentContestId = this._id;
var entriesCursor = Entries.find({contest_id: currentContestId});
var entries = [0,0,0,0,0,0,0,0,0,0];
entriesCursor.forEach(function(entry) {
var m = moment(entry.submitted).format('MMM D');
for (var i = 0; i < 10; i++) {
if (category_arr[i] === m) {
entries[i] += 1;
}
}
});
builtArea(entries);
};
如您所见,我使用 Moment.js 在 x 轴上显示 10 天的跨度。我暂时在系列数据中有硬编码值,但我试图弄清楚如何使系列数据动态化。
我有一个条目集合,其中包含 contest_id 和已提交的属性。提交的属性在创建时使用 new Date()
填充。我希望做的是将一个数组插入到具有 10 个值的系列数据中。每个值都是在特定日期创建的条目数的计数。如果您能就如何完成此任务提供任何建议,我将不胜感激。
你可以在这里找到我的仓库:https://github.com/ryanswapp/rymotion
编辑
我只是试图让它与渲染块中的代码一起工作,但没有成功。有什么想法吗?
您可以尝试使用...
var firstSeries = Entries.find({submitted: category_arr[0]});
然后将该变量放入您的系列中...
data: [firstSeries]
当然,如果您走这条路,您将需要设置发布和订阅,以便您的模板可以访问 Entries 集合。
我明白了。为了获取当前模板实例的 ID,我必须使用 Blaze.currentView._templateInstance.data._id
然后我可以访问属于特定比赛的特定日期的所有条目。
Template.ContestAnalytics.rendered = function () {
var currentContestId = Blaze.currentView._templateInstance.data._id;
Tracker.autorun(function() {
var entries = [];
for (var i = 0; i < 10; i++) {
var tempNum = Entries.find({contest_id: currentContestId, submitted_day: category_arr[i] }).count();
entries.push(tempNum);
}
builtArea(entries);
});
};