2

我有以下非常简单的 Meteor 应用程序:

在标签.html

<body>
  {{> tags}}
</body>

<template name="tags">
  <input type="button" id="submit" value="Change tag" />
  {{tags}}
</template>

...在 tags.js 中

var tags = 1;

if (Meteor.isClient) {
    Template.tags.tags = function() {
        return tags;
    };

    Template.tags.events({
        'click #submit': function() {
            console.log("You pressed the button");
            tags += 1;
        }
    });
}

当我启动应用程序时,我会得到一个按钮和旁边的 var 标记 (1) 的初始值,这是正确的。然后,当我单击按钮时,标签的值会增加(我可以在控制台中检查),但模板不会重新渲染。这是正常行为吗?我不确定我应该期待什么 - 在文档中找不到任何可以告诉我实时模板何时重新渲染的内容。

但是,如果我将 var 更改为使用 Session 对象:

在标签.html

<body>
  {{> tags}}
</body>

<template name="tags">
  <input type="button" id="submit" value="Change tag" />
  {{tags}}
</template>

...在 tags.js 中

var tags = Session.set("tags", 1);

if (Meteor.isClient) {
    Template.tags.tags = function() {
        return Session.get("tags");
    };

    Template.tags.events({
        'click #submit': function() {
            console.log("You pressed the button");
            Session.set("tags", Session.get("tags") + 1);
        }
    });
}

...一切正常。

谁能阐明更多?

4

1 回答 1

3

这很正常。相关文档在这里

可以触发更改的反应性数据源是:

  • 会话变量
  • 集合上的数据库查询
  • 流星状态
  • 流星用户
  • Meteor.userId
  • Meteor.loggingIn
于 2013-01-21T12:32:43.940 回答