2016-08-18 9 views
0

これが与えるMeteor ReactiveVarの動作は?

Template.hello.onCreated(function(){ 
    var tpl = this; 

    tpl.dict = new ReactiveDict(); 
    tpl.var = new ReactiveVar(); 
    Session.set('session', undefined); 

    Tracker.autorun(function(){ 
     console.log(tpl.dict.get('foo'), tpl.var.get(), Session.get('session')); 
    }) 
}); 

Template.hello.onRendered(function(){ 
    var tpl = this; 

    console.log(this.dict.get('foo'), this.var.get(), Session.get('session')); 

    tpl.dict.set('foo', 'foo'); 
    tpl.var.set('foo'); 
    Session.set('session', 'foo'); 
}); 

(いくつかのパッケージのアップデートためかもしれない?)私は、ユーザーがページの最後に達したときにサブスクリプションを延長するReactiveVarを使用しますが、私は最近、いくつかの奇妙な行動を経験した:

undefined undefined undefined (onCreated) 
undefined undefined undefined (onRendered) 
foo foo foo (onCreated, after autorun) 

私の基本的な質問です:これは正常な動作になっていますか? ReactiveVar/Dictは変更されたときに自動的に自動実行されることはありませんか?

これについてのアイデアか、私はちょうど馬鹿ですか? :)

答えて

1

これは完全に予想される動作です。 がonRenderedの前に実行され、末尾がonRenderedの場合は、変数に値を設定していますか。そして、autorunブロック(暗黙的または明示的)にあるコードだけが、依存関係が変更されたときに再実行されます。 onRenderedおよびonCreated自体は反応性ではありません(テンプレートヘルパーなどとは異なります)。

関連する問題