我可以指定 Tracker.autorun() 函数所依赖的会话变量吗?
Can I specify what session variables a Tracker.autorun() function depends on?
我目前有一段类似这样的代码:
Tracker.autorun(function() {
var foo = Session.get("foo")
var bar = Session.get("bar")
if (bar)
console.log("foo changed and bar is set")
else
console.log("foo changed and bar is not set")
}
此代码失败,因为即使只有 bar
发生变化,控制台也会打印 foo changed
条消息之一。
我有在我的Tracker.autorun()
中同时使用foo
和bar
,没有它 运行 每当 bar
发生变化时,我想通过告诉“Tracker”不要跟踪 bar
或者如果可能的话询问 Tracker
是什么引发了重新计算来做到这一点,而不是将函数分离为不同的自动运行 函数,或者通过手动跟踪 Session
变量发生了哪些变化。
您可以拆分自动运行功能:
Tracker.autorun(function() {
var foo = Session.get("foo")
// will run when foo changes
}
Tracker.autorun(function() {
var bar = Session.get("bar")
// will run when bar changes
}
事实证明,this question has already been answered before。
答案是使用Tracker.nonreactive()
。我的问题的固定代码是:
Tracker.autorun(function() {
var foo = Session.get("foo")
var bar = Tracker.nonreactive(func() {
return Session.get("bar")
})
if (bar)
console.log("foo changed and bar is set")
else
console.log("foo changed and bar is not set")
}
这种方法怎么样?
var foo;
var bar;
Tracker.autorun(function() {
foo = Session.get("foo")
bar = Session.get("bar")
});
Tracker.autorun(function() {
// Track for changes of `foo`
Session.get("foo");
if (bar)
console.log("foo changed and bar is set")
else
console.log("foo changed and bar is not set")
});
UPD.
哦,我明白了,你已经找到了解决办法。无论如何,我会在这里留下我的答案,也许有人会觉得它有用。
我目前有一段类似这样的代码:
Tracker.autorun(function() {
var foo = Session.get("foo")
var bar = Session.get("bar")
if (bar)
console.log("foo changed and bar is set")
else
console.log("foo changed and bar is not set")
}
此代码失败,因为即使只有 bar
发生变化,控制台也会打印 foo changed
条消息之一。
我有在我的Tracker.autorun()
中同时使用foo
和bar
,没有它 运行 每当 bar
发生变化时,我想通过告诉“Tracker”不要跟踪 bar
或者如果可能的话询问 Tracker
是什么引发了重新计算来做到这一点,而不是将函数分离为不同的自动运行 函数,或者通过手动跟踪 Session
变量发生了哪些变化。
您可以拆分自动运行功能:
Tracker.autorun(function() {
var foo = Session.get("foo")
// will run when foo changes
}
Tracker.autorun(function() {
var bar = Session.get("bar")
// will run when bar changes
}
事实证明,this question has already been answered before。
答案是使用Tracker.nonreactive()
。我的问题的固定代码是:
Tracker.autorun(function() {
var foo = Session.get("foo")
var bar = Tracker.nonreactive(func() {
return Session.get("bar")
})
if (bar)
console.log("foo changed and bar is set")
else
console.log("foo changed and bar is not set")
}
这种方法怎么样?
var foo;
var bar;
Tracker.autorun(function() {
foo = Session.get("foo")
bar = Session.get("bar")
});
Tracker.autorun(function() {
// Track for changes of `foo`
Session.get("foo");
if (bar)
console.log("foo changed and bar is set")
else
console.log("foo changed and bar is not set")
});
UPD. 哦,我明白了,你已经找到了解决办法。无论如何,我会在这里留下我的答案,也许有人会觉得它有用。