我目前有一段类似的代码:
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")
}
此代码失败,因为即使仅foo changed
更改,控制台也会打印其中一条bar
条消息。
我 在我的foo
中同时使用bar
和 Tracker.autorun()
,而bar
无法运行bar
更改,我想通过告诉'Tracker'不跟踪Tracker
或者通过询问Session
什么引发重新计算,而不是将功能分成不同的自动运行功能或通过手动保持来实现标签cancel
变量已更改。
答案 0 :(得分:2)
这种做法怎么样?
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。强> 哦,我明白了,你已经找到了解决方案。无论如何,我会在这里留下我的答案,也许有人会觉得它很有用。
答案 1 :(得分:-1)
您可以拆分自动运行功能:
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
}
答案 2 :(得分:-1)
事实证明,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")
}