我正在使用Reactive-var,尝试重新发布整个集合。我正在使用最新的 Meteor 1.5 。一切正常,但已解决的问题仍然出现在列表中,即使我已将其免于发布。
在下面的服务器中,一旦客户提交了问题的答案,除了所有正确回答的问题外,必须重新发布新的问题数据。这就是这里没有发生的事情。但是当我刷新页面时,一切正常!但是我需要以实时方式进行此操作,而无需刷新页面。
服务器代码
Meteor.publish('Question.Random', function(refreshValue){
var clientQuestions = [];
var clientCorrectQuestions = QuestionHistory.find({userId : this.userId, result : 1}, {_id : 0, questionId : 1});
if(clientCorrectQuestions.count() > 0){
//get array of correct solved questions
clientCorrectQuestions.map( function(correctQuestion) {
clientQuestions.push(correctQuestion.questionId);
});
}
var randomskipCount = Math.floor(Math.random() * 100) + 1;
return Question.find({_id : { $nin: clientQuestions}});
});
客户代码
Template.temp1.onCreated(function(){
this.refreshValue = new ReactiveVar(0);
Meteor.subscribe('Question.Random', this.refreshValue.get());
});
Template.temp1.events({
"click .myBtn": function(event, template){
event.preventDefault();
Meteor.call('processUserInput', function(error, response){
if(error){
Bert.alert("<strong>Error !", 'danger', 'fixed-top' );
} else if(response){
instance.refreshValue.set(Math.floor(Math.random() * 500));
}
});
return false;
}
});
任何帮助都将受到极大的赞赏和奖励。
答案 0 :(得分:2)
我看到您正在尝试使用聚合进行发布。有不止一种方法可以做到这一点。在这种情况下,您只需将subscribe命令包装在一个被动块中:
Template.temp1.onCreated(function() {
this.refreshValue = new ReactiveVar(0);
this.autorun(() => {
this.subscribe('Question.Random', this.refreshValue.get());
});
});
答案 1 :(得分:1)
您应该将订阅包装在autorun
:
Template.temp1.onCreated(function(){
this.refreshValue = new ReactiveVar(0);
this.autorun(() => {
Meteor.subscribe('Question.Random', this.refreshValue.get());
});
});