似乎我无法为命名空间显示数组
{{#each reports}}
{{_id}}
{{/each}}
我的代码看起来像这样
服务器方法。
reports : function(){
var pipeline = [
{$group:{_id: "$activity.destination.name","count":{$sum:1 } } },
{$match:{_id:{$ne:null} }}];
var result = Reports.aggregate(pipeline);
console.log(result);
return result;
来自助手
reports: function(){
Meteor.call("reports",function(err, data) {
arr =[];
data.forEach(function(doc){
arr.push(doc);
});
console.log(arr);
return arr;
});
}
在浏览器控制台中,响应如下所示
[Object]
0:Object
_id: "Balance Sheet and P&L Rates - Current Year"
count: 2 ..etc
我不确定它的名称空间是否是非游标的对象数组。但它并没有给我一个错误。我不确定我做的是否正确。
答案 0 :(得分:1)
Meteor.call立即返回,一旦数据从服务器返回,就会调用回调。
您的模板正在引用一个帮助程序,而该帮助程序又调用服务器方法,然后立即返回什么都没有。返回时,帮助程序的回调无法将数据返回到模板。
在你的情况下你应该:
为报告创建一个集合。
在访问相关页面时订阅报告集(如果您正在使用Iron Router,这通常是从路由控制器完成的。
创建发布功能以将报告发布到集合。
最后一点并不像往常一样直截了当,因为你正在聚合结果,但是仍然可以使用这样的东西(未经测试):
Meteor.publish('reports', function(options) {
var sub = this;
var pipeline = [
{$group:{_id: "$activity.destination.name","count":{$sum:1 } } },
{$match:{_id:{$ne:null} }}];
var result = Reports.aggregate(pipeline);
var arrayLength = reports.length;
for (var i = 0; i < arrayLength; i++) {
var report = reports[i];
sub.added('reports', report._id, report);
}
})
然后,您只需从帮助者调用Reports集合中的find
:
reports: function() {
return Reports.find()
}
或者将相同的光标作为数据上下文的一部分返回到Iron Router控制器中,并直接在模板中使用结果。