2016-12-04 4 views
0

私はMeteorで反応性のあるデータソースの古い価値を得る方法を模索しています。私はこのコードを持って言う:メテオの反応性データソースの古い値を取得するには?

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); 

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); 

私が欲しいものは同様に、if文の実行を決定する新しい値で、この古い値を使用し、fooの古い値を取得するには何とかです私は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を検索しましたが、解決策が見つかりませんでした。あなたはこれを回避するための解決策やパッケージ/モジュールを知っていますか?

答えて

2

あなたがしていることは問題ありません。以前のバージョンの変数を保存するのが一般的な方法です。データベースからフェッチした場合、自動実行機能の開始時のデータは引き続き古い値になります。反応変数が変更されたときに自動実行が開始されますので、fooは既に入力時に変更されています。

+0

私はそれを行うことができます知っている、実際には私はいつもそれをやっている。しかし、それは私にとって「正しい」と感じることはなく、「かわいく」見えることはありません。私は 'foo.getOld()'のようなより直感的な方法を好みます。私はこの '.getOld'をコレクションに持っていないのは大丈夫ですが(実際にはそれが必要なことはありませんでしたが)、' ReactiveVar'、 'ReactiveDict'ではキャッシュ変数を使用するのが面倒です。とにかくあなたの答えのおかげで:) – Khang

関連する問題