我正在尝试根据设置的会话从Meteor方法返回一个集合对象。
这是方法调用:
Template.batches.search = function () {
if (typeof Session.get('search-parameters') != 'undefined') {
var searchParameters = Session.get('search-parameters');
return Meteor.call('search', searchParameters, function(error , result){
if (error) {
console.log(error.reason);
} else{
return result;
}
});
}
}
这是被称为L
的方法Meteor.methods({
search: function (session) {
return Batches.find({event: { $regex: session}});
}
});
我读过一个方法不能返回一个集合对象,而是使用fetch()代替。这会返回一个数组,但是,我无法像colleciton对象一样遍历数组以返回结果。请指教。
答案 0 :(得分:0)
模板助手需要同步。有几种方法可以解决这个问题,但这是一个例子:
Template.batches.created = function() {
// this will be cleaned up for you when the template is destroyed
this.autorun(function() {
var search = Session.get('search-parameters');
Meteor.subscribe('batchesForSearch', search);
});
};
Template.batches.helpers({
search: function() {
var search = Session.get('search-parameters');
return Batches.find({event: {$regex: search}});
}
});
在batches
模板中,创建一个自动运行,只要会话发生变化,就会预订batchesForSearch
。文档到达客户端后,将通过search
帮助程序将其提供给您的模板。
batchesForSearch
发布功能可能如下所示:
Meteor.publish('batchesForSearch', function(search) {
check(search, String);
if (_.isEmpty(search)) {
// make sure we do not publish the entire collection if search is empty
return this.ready();
} else {
return Batches.find({event: {$regex: search}});
}
});
请注意,如果搜索为空,我们会小心避免发布整个集合。