meteor中的chart.js未从上下文中提取数据
回答我自己:问题(其中一个问题)似乎是我期待着一个数字数组,而我在集合中拥有的是一个包含数字的数组。。。因此,需要对数组进行解析,以隔离我要查找的数据。一旦我掌握了一系列数字,事情就变得容易多了 下面是从数组中提取正确字段的代码,然后对其进行处理以便使用:meteor中的chart.js未从上下文中提取数据,meteor,charts,iron-router,chart.js,Meteor,Charts,Iron Router,Chart.js,回答我自己:问题(其中一个问题)似乎是我期待着一个数字数组,而我在集合中拥有的是一个包含数字的数组。。。因此,需要对数组进行解析,以隔离我要查找的数据。一旦我掌握了一系列数字,事情就变得容易多了 下面是从数组中提取正确字段的代码,然后对其进行处理以便使用: var lvl_min_raw = _.compact(_.pluck(EDC_DATA.find({session_id: Session.get("current_session_id")},{fields: {lvl_min:
var lvl_min_raw = _.compact(_.pluck(EDC_DATA.find({session_id: Session.get("current_session_id")},{fields: {lvl_min: 1}}).fetch(),'lvl_min'));
var lvl_min_ints = _.map(lvl_min_raw.map(Number), function(num){ return num - 256; });
var lvl_max_raw = _.compact(_.pluck(EDC_DATA.find({session_id: Session.get("current_session_id")},{fields: {lvl_max: 1}}).fetch(), 'lvl_max'));
var lvl_max_ints = _.map(lvl_max_raw.map(Number), function(num){ return num - 256; });
var lvl_avg_raw = _.compact(_.pluck(EDC_DATA.find({session_id: Session.get("current_session_id")},{fields: {lvl_avg: 1}}).fetch(), 'lvl_avg'));
var lvl_avg_ints = _.map(lvl_avg_raw.map(Number), function(num){ return num - 256; });
var lvl_median_raw = _.compact(_.pluck(EDC_DATA.find({session_id: Session.get("current_session_id")},{fields: {lvl_median: 1}}).fetch(), 'lvl_median'));
var lvl_median_ints = _.map(lvl_median_raw.map(Number), function(num){ return num - 256; });
var label_array_length = lvl_median_ints.length;
var lvl_labels_raw = Array.apply(null, {length: label_array_length}).map(Number.call, Number)
var lvl_labels_short = _.map(lvl_labels_raw.map(String), function(str){ return str; });
工作代码在这里:以防其他人遇到这种情况。希望能有帮助
=================================================================
我正在将大量WiFi设备的遥测数据加载到mongo数据库中,并希望实时显示各个设备的指标,以便解决信号电平和其他问题。为此,我设置了一个简单的meteor应用程序来访问数据。我现在正在尝试使用meteor中的chart.js来提供实时图形
我正在解决的问题是,我可以实时显示任何wifi会话的列表数据,但我似乎无法用相同的数据填充图形。我相当肯定这是一个上下文问题,但在谷歌搜索了8个小时左右之后,我不明白如何正确访问上下文来填充数据
实际误差为:
Tracker afterFlush函数异常:未定义不是函数(评估“新图表(lvlCtx).line(数据)”)
路由器如下所示:
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function() { return Meteor.subscribe('Edc_Data'); },
});
Router.route('/', {
name: 'activityList'
});
Router.route('/:session_id', {
name: 'sessionPage',
data: function() { return EDC_DATA.find({session_id: this.params.session_id},{sort: {_id: -1}}); }
});
<template name="sessionPage">
<div class="navbar-header">
Path: /session_id
</div>
WiFi Levels:
<div> <canvas id="lvlChart" width="400" height="400"> </canvas> </div>
Raw Data
<div>
{{#each this}}
<p> {{household_id}} | {{time}} | {{session_id}} | {{lvl_min}} | {{lvl_max}} | {{lvl_avg}} | {{lvl_median}} | {{lvl_stddev}}</p>
{{/each}}
</div>
</template>
function drawChart(){
var data = {
labels: this.time,
datasets: [
{
label: "lvl_min",
data: this.lvl_min,
color:"#F38630"
},
{
label: "lvl_max",
data: this.lvl_max,
color : "#E0E4CC"
},
{
label: "lvl_avg",
data: this.lvl_avg,
color : "#69D2E7"
},
{
label: "lvl_median",
data: this.lvl_median,
color : "green"
},
{
label: "lvl_stddev",
data: this.lvl_stddev,
color : "red"
}
]
};
var lvlCtx = $("#lvlChart").get(0).getContext("2d");
var lvlChart = new Chart(lvlCtx);
new Chart(lvlCtx).line(data);
}
Template.sessionPage.rendered = function(){
Deps.autorun(function () { drawChart();
});
};
模板如下所示:
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function() { return Meteor.subscribe('Edc_Data'); },
});
Router.route('/', {
name: 'activityList'
});
Router.route('/:session_id', {
name: 'sessionPage',
data: function() { return EDC_DATA.find({session_id: this.params.session_id},{sort: {_id: -1}}); }
});
<template name="sessionPage">
<div class="navbar-header">
Path: /session_id
</div>
WiFi Levels:
<div> <canvas id="lvlChart" width="400" height="400"> </canvas> </div>
Raw Data
<div>
{{#each this}}
<p> {{household_id}} | {{time}} | {{session_id}} | {{lvl_min}} | {{lvl_max}} | {{lvl_avg}} | {{lvl_median}} | {{lvl_stddev}}</p>
{{/each}}
</div>
</template>
function drawChart(){
var data = {
labels: this.time,
datasets: [
{
label: "lvl_min",
data: this.lvl_min,
color:"#F38630"
},
{
label: "lvl_max",
data: this.lvl_max,
color : "#E0E4CC"
},
{
label: "lvl_avg",
data: this.lvl_avg,
color : "#69D2E7"
},
{
label: "lvl_median",
data: this.lvl_median,
color : "green"
},
{
label: "lvl_stddev",
data: this.lvl_stddev,
color : "red"
}
]
};
var lvlCtx = $("#lvlChart").get(0).getContext("2d");
var lvlChart = new Chart(lvlCtx);
new Chart(lvlCtx).line(data);
}
Template.sessionPage.rendered = function(){
Deps.autorun(function () { drawChart();
});
};
自动运行如下所示:
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function() { return Meteor.subscribe('Edc_Data'); },
});
Router.route('/', {
name: 'activityList'
});
Router.route('/:session_id', {
name: 'sessionPage',
data: function() { return EDC_DATA.find({session_id: this.params.session_id},{sort: {_id: -1}}); }
});
<template name="sessionPage">
<div class="navbar-header">
Path: /session_id
</div>
WiFi Levels:
<div> <canvas id="lvlChart" width="400" height="400"> </canvas> </div>
Raw Data
<div>
{{#each this}}
<p> {{household_id}} | {{time}} | {{session_id}} | {{lvl_min}} | {{lvl_max}} | {{lvl_avg}} | {{lvl_median}} | {{lvl_stddev}}</p>
{{/each}}
</div>
</template>
function drawChart(){
var data = {
labels: this.time,
datasets: [
{
label: "lvl_min",
data: this.lvl_min,
color:"#F38630"
},
{
label: "lvl_max",
data: this.lvl_max,
color : "#E0E4CC"
},
{
label: "lvl_avg",
data: this.lvl_avg,
color : "#69D2E7"
},
{
label: "lvl_median",
data: this.lvl_median,
color : "green"
},
{
label: "lvl_stddev",
data: this.lvl_stddev,
color : "red"
}
]
};
var lvlCtx = $("#lvlChart").get(0).getContext("2d");
var lvlChart = new Chart(lvlCtx);
new Chart(lvlCtx).line(data);
}
Template.sessionPage.rendered = function(){
Deps.autorun(function () { drawChart();
});
};
当我加载页面时,错误控制台中将显示错误“Tracker afterFlush function的异常:undefined不是一个函数(评估'new Chart(lvlCtx).line(data)')”。该模板将呈现页面上画布下方{{{each this}}…{{/each}}块中的项目。由此我推断,上下文正在传递给模板,但没有传递给charts函数,因此没有填充data:字段,从而导致错误
如何访问图表函数中的上下文,以便正确填充数据参数?非常感谢您的帮助