如何在Meteor中获取被动数据源的旧值?

时间:2016-12-04 10:45:39

标签: javascript meteor reactive-programming meteor-tracker

我正在寻找一种方法来获取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,但找不到解决方案。你知道任何解决方案或软件包/模块吗?

1 个答案:

答案 0 :(得分:2)

你做得很好。存储先前版本的变量是一种常见做法。如果从数据库中提取,则自动运行功能开头的数据仍将是旧值。当反应变量发生变化时会触发自动运行,因此在你的情况下,foo在进入时已经改变了。