0

我正在寻找一种方法来获取 Meteor 中反应式数据源的旧值。说我有这个代码:

const foo = new ReactiveVar(1);

Tracker.autorun(() => {
  const fooNewVal = foo.get();

  if (/* compare based on fooNewVal value */) {
    // do something
  }
});

foo.set(2);
foo.set(3);
foo.set(4);

我想要的是以某种方式获取 的旧值foo,使用这个旧值和新值来决定 if 语句的执行,例如:

const foo = new ReactiveVar(1);

Tracker.autorun(() => {
  const fooNewVal = foo.get();
  const fooOldVal = foo.getOld();

  if (fooNewVal - fooOldVal === 1) {
    // do something
  }

  if (fooNewVal - fooOldVal === 2) {
    // do something
  }

});

foo.set(2);
foo.set(3);

我知道我可以使用普通变量在函数末尾存储旧值autorun

const foo = new ReactiveVar(1);
let oldValue = 1;

Tracker.autorun(() => {
  const fooNewVal = foo.get();

  if (fooNewVal - oldValue === 1) {
    // do something
  }

  if (fooNewVal - oldValue === 2) {
    // do something
  }

  oldValue = fooNewVal;
});

foo.set(2);
foo.set(3);

虽然它有效,但对我来说看起来并不“正确”。我搜索了 Atmosphere 和 Npm,但找不到解决方案。你知道解决这个问题的任何解决方案或包/模块吗?

4

1 回答 1

2

你在做什么很好。存储以前版本的变量是一种常见的做法。如果您从数据库中获取,自动运行函数开头的数据仍将是旧值。当反应变量更改时会触发自动运行,因此在您的情况下 foo 在输入时已经更改。

于 2016-12-04T12:24:33.200 回答