我在客户端更新Meteor应用程序中的某些值时遇到问题。我试图了解ReactiveVar的工作原理。 当我在客户端对集合使用find()方法时,每次更改内容时网站都会立即更新。我想使用ReactiveVar和服务器端方法实现相同的效果。所以下面的代码对我来说正常工作:
// Client
Template.body.onCreated(function appBodyOnCreated() {
this.subscribe('activities');
}
Template.body.helpers({
getCounter() {
return Activities.find({
editorId: Meteor.userId(),
'referredObject.type': 'LIST'
}).count();
}
});
但是当我尝试使用服务器端方法实现相同的效果时,它无法正常工作。下面的代码只更新变量一次。如果我想获得当前值,我需要刷新页面。
// Server
Meteor.methods({'activitiesCreateCount'(userId, objectType) {
check(userId, String);
check(objectType, String);
return Activities.find({
editorId: userId,
'referredObject.type': objectType
}).count();
}
});
// Client
Template.body.onCreated(function appBodyOnCreated() {
this.subscribe('activities');
this.activitiesAmount = new ReactiveVar(false);
}
Template.body.helpers({
getCounter() {
var tempInstance = Template.instance();
Meteor.call('activitiesCreateCount', Meteor.userId(), 'TODO', function(err, response) {
tempInstance.activitiesAmount.set(response);
});
return Template.instance().activitiesAmount.get();
}
});
如果我想要总是拥有变量的当前值(如在第一个仅客户端的示例中),我如何改进我的代码?
答案 0 :(得分:-2)
尝试将Meteor.call
移至Template.body.onCreated
像这样的东西
// Server
Meteor.methods({'activitiesCreateCount'(userId, objectType) {
check(userId, String);
check(objectType, String);
return Activities.find({
editorId: userId,
'referredObject.type': objectType
}).count();
}
});
// Client
Template.body.onCreated(function appBodyOnCreated() {
self = this;
this.activitiesAmount = new ReactiveVar(false);
Meteor.call('activitiesCreateCount', Meteor.userId(), 'TODO', function(err, response) {
self.activitiesAmount.set(response);
});
}
Template.body.helpers({
getCounter() {
return Template.instance().activitiesAmount.get();
}
});