3

我目前有一段类似这样的代码:

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 _ _通过手动密切关注哪些变量发生了变化。barTracker.autorun()barbarTrackerSession

4

3 回答 3

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。 哦,我明白了,您已经找到了解决方案。无论如何,我会在这里留下我的答案,也许有人会觉得它有用。

于 2016-02-20T14:29:41.870 回答
-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
}
于 2016-02-11T22:30:14.390 回答
-1

事实证明,这个问题之前已经回答过了

答案是使用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")
}
于 2016-02-15T15:00:48.713 回答