【问题标题】:Meteor helper doesn't refresh on Reactive var .set()Meteor 助手不会在 Reactive var .set() 上刷新
【发布时间】:2015-10-10 15:50:38
【问题描述】:

我在 autorun 上更新了响应式 var。 helper 中使用了相同的反应变量。但是helper 值不会被autorun 函数刷新。我下面的代码会为你解释清楚。

Template.home.onCreated(function () {
  var self = this;
  self.ITEMS_INCREMENT = 2;

  self.itemsLimit = new ReactiveVar(2);


});

Template.home.onRendered(function () {
  var self = this;
  this.autorun(function(){
    if( true ){
      self.itemsLimit.set(self.itemsLimit.get()+self.ITEMS_INCREMENT);
      console.log(self.itemsLimit.get()); // set values are fine
    }
  });

});

Template.home.helpers({
testHelper: function(){
  console.log(Template.instance().itemsLimit.get()); // console returns 2 and 4 only. no more update :(
  return true;
}
});

在处理数据或使用方面有什么问题吗?如何让 helpers 可行?

【问题讨论】:

  • 你想要完成什么,你期望会发生什么?你的模板标记是什么样的?

标签: meteor meteor-blaze meteor-helper meteor-react


【解决方案1】:

好吧好吧,我看不出你要在哪里改变反应变量的值。当第一次计算在您的跟踪器中运行时,它只会更改。所以只有你看到更新的人。使用ReactiveVar 的想法是,当您更改它时,它会在 helper 或 autorun 内部进行更改。

简而言之,您可以做些什么来测试它:

Template.home.onRendered(function () {
  var self = this;
  Meteor.setInterval(function(){
      self.itemsLimit.set(self.itemsLimit.get()+self.ITEMS_INCREMENT);
    }, 500);
});

【讨论】:

  • 感谢@ZuzEL。但我有一个疑问,setInterval 的方法好吗??
  • 不,这在任何意义上都不好。这只是为了测试ReactiveVar 的工作原理。您应该根据需要实现的目标更改响应式 var。例如单击按钮时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 2016-04-25
  • 2020-07-07
  • 1970-01-01
  • 2015-12-01
  • 2015-01-29
相关资源
最近更新 更多