即使使用Reactive-var,强行重新运行流星中的发布也不起作用

时间:2017-06-19 09:56:50

标签: meteor

我正在使用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;
  }
});

任何帮助都将受到极大的赞赏和奖励。

2 个答案:

答案 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());
  });
});