gpt4 book ai didi

Meteor.js 集合聚合返回未定义不是函数

转载 作者:行者123 更新时间:2023-12-01 02:13:02 24 4
gpt4 key购买 nike

我正在尝试在我的 Meteor.js 应用程序中进行集合聚合,如下所示,但每次调用服务器 logSummary 方法时都会出现以下错误。有人可以告诉我我做错了什么/如何解决这个错误吗?谢谢。

注意:我使用的是 Meteor-aggregate包裹

TypeError: undefined is not a function
at Object.Template.detailedreport.helpers.myCollection (http://localhost:3000/client/views/report.js?

代码:
Template.detailedreport.rendered = function() {
Session.set("dreport_customer", "");
Session.set("dreport_project", "");
Session.set("dreport_startDate", new Date());
Session.set("dreport_endDate", new Date());

$('.set-start-date').datetimepicker({
pickTime: false,
defaultDate: new Date()
});
$('.set-end-date').datetimepicker({
pickTime: false,
defaultDate: new Date()
});

$('.set-start-date').on("dp.change",function (e) {
Session.set("dreport_startDate", $('.set-start-date').data('DateTimePicker').getDate().toLocaleString());
});
$('.set-end-date').on("dp.change",function (e) {
Session.set("dreport_endDate", $('.set-end-date').data('DateTimePicker').getDate().toLocaleString());
});
};

Template.detailedreport.helpers({
customerslist: function() {
return Customers.find({}, {sort:{name: -1}});
},
projectslist: function() {
return Projects.find({customerid: Session.get("dreport_customer")}, {sort:{title: -1}});
},
myCollection: function () {
var now = Session.get("dreport_startDate");
var then = Session.get("dreport_endDate");
var custID = Session.get("dreport_customer");
var projID = Session.get("dreport_project");
Meteor.call('logSummary', now, then, projID, custID, function(error, data){
if(error)
return alert(error.reason);
return data;
});

},
settings: function () {
return {
rowsPerPage: 10,
showFilter: true,
showColumnToggles: false,
fields: [
{ key: '0._id.day', label: 'Day' },
{ key: '0.totalhours', label: 'Hours Spent'}
]
};
}

});

Template.detailedreport.events({
'submit form': function(e) {
e.preventDefault();

Session.set('dreport_endDate', $('.set-end-date').data('DateTimePicker').getDate().toLocaleString());
Session.set('dreport_startDate', $('.set-start-date').data('DateTimePicker').getDate().toLocaleString());
Session.set('dreport_project', $(e.target).find('[name=project]').val());
Session.set('dreport_customer', $(e.target).find('[name=customer]').val());

},
'change #customer': function(e){
Session.set("dreport_project", "");
Session.set("dreport_customer", e.currentTarget.value);
},
'change #project': function(e){
Session.set("dreport_project", e.currentTarget.value);
}
});



Template:

<div>
{{> reactiveTable class="table table-bordered table-hover" collection=myCollection settings=settings}}
</div>




Server:

Meteor.methods({
logSummary: function(startDate, endDate, projid, custid){
var pipeline = [
{ $match: { date: { $gte: new Date(startDate), $lte: new Date(endDate) },
projectid: projid,
customerid: custid
}
},
{ $group: {
_id: {
"projectid": "$projectid",
"day": { "$dayOfMonth": "$date" },
"month": { "$month": "$date" },
"year": { "$year": "$date" }
},
totalhours: {"$sum": "$hours"}
}}
];
return ProjectLog.aggregate(pipeline);;
}
});

最佳答案

查看 ReactiveTable 文档,您似乎需要执行以下操作:

Template.myTemplate.helpers({
myCollection: function () {
return myCollection;
}
});

其中 myCollection 是您定义的 Mongo/Meteor 集合(例如 BlogPosts)的名称,例如 BlogPosts = new Mongo.Collection('blogPosts');
你得到 undefined is not a function 的原因是您在模板助手中调用 Meteor 方法。电话是 异步 所以返回值为 undefined .现在你正在通过 undefined到 react 表。 ReactiveTable 将尝试调用类似 myCollection.find()本质上是 undefined.find()因此会抛出您看到的错误。

稍后 Meteor 通话将结束, data值将丢失,因为函数已经返回。

您可以调用 Meteor.call在 onCreated 函数内部,如下所示:
Template.myTemplate.onCreated(function () {
Meteor.call('myFunction', 'my', 'params', function (err, result) {
if (err) {
// do something about the error
} else {
Session.set('myData',result);
}
});
});

Template.myTemplate.helpers({
myData: function () {
Session.get('myData')
}
});

然而,这并不能解决 ReactiveTable 的问题。

如果您尝试显示的集合仅用于此单个页面,您可以将聚合放在发布函数中,以便 minimongo 包含 仅限 与聚合匹配的文档,因此正确的文档将出现在您的 ReactiveTable 中。

关于Meteor.js 集合聚合返回未定义不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27594435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com