Meteor ReactiveVar的行为?

时间:2016-08-18 19:15:09

标签: 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');
});

这给出了:

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

我的基本问题是:这应该是正常行为吗? ReactiveVar / Dict是否应该在更改后自动自动运行?

对此有任何想法或我只是愚蠢吗? :)

1 个答案:

答案 0 :(得分:1)

这是完全预期的行为。 onRenderedonRendered之前触发onRendered,只有在onCreated的最后才会为您的变量设置任何值。是的,只有在自动运行块(隐式或显式)中的代码才会在依赖关系发生变化时重新运行。 {{1}}和{{1}}本身不具有反应性(与模板助手不同)。