我在项目中使用了一堆辅助方法。由于客户端api的限制(不同的功能!),其中一些需要将整个集合加载到客户端。我用Google搜索了问题并找到Meteor.methods
作为解决方案。
我可以在Meteor方法中使用帮助器(如this.helpers
)吗?或者我应该如何在前端动态更新我的数据?
有人可以举个例子吗?
其他信息:
class View2 {
constructor($interval, $scope, $reactive) {
'ngInject';
$reactive(this).attach($scope);
this.helpers({
getOrderNumber(){
this.tempVar = Kafkadata.find().fetch();
this.tempVar2 = _.pluck(this.tempVar, 'orderNumber');
this.tempVar3 = _.uniq(tempVar2, false);
return this.tempVar3;
},
});
}
这是帮助程序查询的示例。目前,此代码在客户端运行。我获得所有订单(tempvar),然后删除除ordernumbers(tempvar2)之外的所有数据。最后,我删除所有多个订单号。 ordernumber不是唯一值。以下是其中一个集合的示例:
{"orderNumber":"f2a3ed95-fcc3-4da0-9b3f-32cf5ed087f8","value":12480,"booleanValue":false,"intValue":12480,"doubleValue":0,"status":"GOOD","itemName":"MILLING_SPEED","timestamp":1479145734448,"_id":{"_str":"5824f4bc7ff3f0199861f11d"}}
我想使用像db.collection.distinct()
这样的函数。但他们只在服务器端工作。我想我必须使用Meteor.methods()
来使服务器端这个东西。但是这个助手的功能呢?它们如何在Meteor.methods()上工作?
EDIT2:
我的测试: 客户端: 文件夹:myProject的/进口/ UI /厂景
class View1 {
constructor($interval, $scope, $reactive) {
'ngInject';
$reactive(this).attach($scope);
this.helpers({
// some code
getTestData(){
Meteor.call('allTestData',function(error, result){
if(error){
console.log("error");
}else{
return result;
}
});
}
}); //end of contructor
// this is my testfunction, which is bound to a button!
testFunction(){
Meteor.call('allTestData',function(error, result){
if(error){
alert('Error');
}else{
console.log(result);
}
});
}
在服务器端:
文件夹:myProject的/服务器/ main.js
Meteor.methods({
allTestData:()=>{
var results=Kafkadata.find().count();
console.log(results);
return results;
},
});
这是我的view1.html:
//some code
<md-button ng-click="view1.testFunction()"> It works!</md-button>
<h1>{{view1.getTestData}}</h1>
为什么按钮工作,而不是帮助?
答案 0 :(得分:0)
即使Mongo支持.distinct,Meteor也不会公开它,即使在服务器上也是如此。您只需使用_.uniq作为示例节目,但出于性能原因,如果它在服务器上运行则会更好。
以下是我使用的帮助程序示例:
aweek: () => {
if (debug)
console.log("Querying weekly appointments for "+this.selectedWeek.format("Do MMMM"));
var weekApts = Appointments.find(
{start: {$gte: new Date(this.getReactively('this.selectedWeek').clone().day(1)),
$lt: new Date(this.getReactively('this.selectedWeek').clone().endOf('week'))},
elderid: Meteor.userId()
}).fetch();
return utils.services.getAWeek(weekApts,utils.data.elderTimeFormat);
},
请注意在代码中使用 this.getReactively(&#39; this.selectedWeek&#39;) ...基本上这会告诉Meteor以反应方式运行此帮助程序,因此如果值为this.selectedWeek更改,帮助程序将重新运行。因此,当我点击日历中的一周并更新变量时,它会再次运行我的帮助程序来获取数据。
utils.services.getAWeek()函数对数据数组进行一些计算和格式化,使得显示更容易。
如果您创建一个Meteor方法来进行处理,我会让它更新一个包含其结果的集合,然后客户端上的帮助程序将自动更新。最好让技术为您完成工作:)