我有一个会话变量,我想用固定的周期更新.说,我希望这个变量每60秒增加1.
在我看来,这样做的最佳位置是相关模板的帮助部分.我首先尝试使用setInterval执行此操作,如here所述,但这不起作用(该功能似乎没有重复).
然后我尝试了我认为简单的解决方案,但这也行不通.见下文.辅助变量’currentPosition’应该返回当天的当前分钟(加上偏移量).但是,它仅在首次调用模板时以及在“事件”部分中定义的函数中更改会话变量“offset”时执行此操作,该函数响应特定div上的单击(“下一个”按钮) .
currentPosition: function () { var d = new Date(); var h = d.getHours(); var m = d.getMinutes(); var w = h * 60 + m; Session.set("position",w + Session.get("offset")); return Session.get("position"); },
我认为上面的帮助器会每分钟主动更新’currentPosition’的值.但事实并非如此.
所以,我的问题是,如何调整会话变量每个,比如说60秒,增加1比1,而变量调整时,会话变量的新值会反映在app中.
(如果有一个简单而完全不同的解决方案适用于流星,我不知道它,所以如果我遗漏了一些明显的东西,请指出它.)
解决方法
虽然您使用的是反应变量,但它只会被设置一次 – 首次调用帮助程序时.因此它不再运行.您需要帮助程序之外的函数来为您设置变量.记住一条重要规则 – 助手永远不应该拥有
side effects.
以下是如何创建计时器的完整工作示例:
HTML
<body> {{> timer}} </body> <template name="timer"> <p>Total Seconds: {{seconds}}</p> </template>
JS
Template.timer.helpers({ seconds: function() { return Template.instance().seconds.get(); } }); Template.timer.created = function() { var self = this; this.seconds = new ReactiveVar(0); this.handle = Meteor.setInterval((function() { self.seconds.set(self.seconds.get() + 1); }),1000); }; Template.timer.destroyed = function() { Meteor.clearInterval(this.handle); };