我正在寻找一种方法来获取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,但找不到解决方案。你知道任何解决方案或软件包/模块吗?
答案 0 :(得分:2)
你做得很好。存储先前版本的变量是一种常见做法。如果从数据库中提取,则自动运行功能开头的数据仍将是旧值。当反应变量发生变化时会触发自动运行,因此在你的情况下,foo在进入时已经改变了。