ReactiveVar 未在 Meteor 中的 Tracker.autorun 上获得新值
ReactiveVar not getting new value on Tracker.autorun in Meteor
我正在实例化一个新的 ReactiveVar:
Template.myTemplate.onCreated(function() {
this.var1 = new ReactiveVar(0);
}
当用户选择新的年份值时,我正在 Tracker.autorun 强制重新运行:
Template.myTemplate.onRendered(function() {
Tracker.autorun(function() {
var year = Session.get('chartYear').toString(); // This session is from another template
// Do stuff
...
Template.instance().var1.set(new data);
}
}
我的帮手重新运行函数:
Template.myTemplate.helpers({
function1: function () {
return Template.instance().var1.get();
}
不确定发生了什么,但是当第一次选择年份值时,一切运行正常。但是当用户选择一个新的年份值时,会出现 TypeError 结果:
"TypeError: null is not an object (evaluating 'Template.instance().var1')"
但是,如果我将 ReactiveVars 替换为 Sessions,则当用户选择不同的年份值时一切正常。有人能帮忙吗?
不清楚是哪一行抛出该错误(如果以下内容不适用 post 完整错误表明这是来自帮助程序还是 onRendered 事件等)。
不过我怀疑这是来自 Template.onRendered
event, which requires you to access the template instance from the this
object, like you are in your Template.onCreated
事件。
- 在 'lifecycle' 事件中,例如
Template.onRendered
、Template.onCreated
、Template.onDestroyed
、当前模板实例为this
对象
- 在'helper'函数中,使用
Template.instance()
访问当前模板实例
- 在 'DOM' 事件中,例如
'click #myButton'(event, instance)
,当前模板实例是传递给事件处理程序的第二个参数。 (Template.instance()
also works here, but convention is to name the second argument 'instance', and use in instead)
所以尝试将 onRendered
函数更改为:
Template.myTemplate.onRendered(function() {
templateInstance = this;
Tracker.autorun(function() {
var year = Session.get('chartYear').toString(); // This session is from another template
// Do stuff
...
templateInstance.var1.set(newData);
}
}
我正在实例化一个新的 ReactiveVar:
Template.myTemplate.onCreated(function() {
this.var1 = new ReactiveVar(0);
}
当用户选择新的年份值时,我正在 Tracker.autorun 强制重新运行:
Template.myTemplate.onRendered(function() {
Tracker.autorun(function() {
var year = Session.get('chartYear').toString(); // This session is from another template
// Do stuff
...
Template.instance().var1.set(new data);
}
}
我的帮手重新运行函数:
Template.myTemplate.helpers({
function1: function () {
return Template.instance().var1.get();
}
不确定发生了什么,但是当第一次选择年份值时,一切运行正常。但是当用户选择一个新的年份值时,会出现 TypeError 结果:
"TypeError: null is not an object (evaluating 'Template.instance().var1')"
但是,如果我将 ReactiveVars 替换为 Sessions,则当用户选择不同的年份值时一切正常。有人能帮忙吗?
不清楚是哪一行抛出该错误(如果以下内容不适用 post 完整错误表明这是来自帮助程序还是 onRendered 事件等)。
不过我怀疑这是来自 Template.onRendered
event, which requires you to access the template instance from the this
object, like you are in your Template.onCreated
事件。
- 在 'lifecycle' 事件中,例如
Template.onRendered
、Template.onCreated
、Template.onDestroyed
、当前模板实例为this
对象 - 在'helper'函数中,使用
Template.instance()
访问当前模板实例
- 在 'DOM' 事件中,例如
'click #myButton'(event, instance)
,当前模板实例是传递给事件处理程序的第二个参数。 (Template.instance()
also works here, but convention is to name the second argument 'instance', and use in instead)
所以尝试将 onRendered
函数更改为:
Template.myTemplate.onRendered(function() {
templateInstance = this;
Tracker.autorun(function() {
var year = Session.get('chartYear').toString(); // This session is from another template
// Do stuff
...
templateInstance.var1.set(newData);
}
}