我正在学习流星(和Javascript),并试图理解为什么某件事有效而另一件事无效的概念。

我的模板里有

<template name="test">
    <p>Salary: {{salary}}</p>
    <button class="update">Update</button>
</template>


在我的客户端.js中,我有以下内容:

if (Meteor.isClient) {

  Session.setDefault("salary", 100);

  Template.test.helpers({
    salary: function() {
      return Session.get("salary");
    }
  });

  Template.test.events({
    "click .update": function (event, template){
      Session.set("salary", Session.get("salary") + 100);
    }
  });
}


我期望它的工作原理。

但是花了很长时间才弄清楚我需要将薪水设置为“职能”。由于来自C#/ WPF背景,我做了以下工作:

  Template.test.helpers({
    salary: Session.get("salary")
  });


这导致自动更新无法正常工作,并让我真的抓狂了!

为什么对于meteor.js,您需要为函数设置变量以使自动更新起作用?这是JavaScript限制/事物还是流星事物?

我尝试四处搜寻,但没有发现任何用处。我知道如何开始工作,但是想要了解为什么我需要将变量设置为函数而不是值?

如果有人能指出正确的方向,我将不胜感激!

谢谢

最佳答案

解释代码后,薪水将在表达式的右侧求值,当发生这种情况时,Session.get("salary")将在页面加载时求值,并且该值将返回到薪水属性。

当您将薪水值设置为一个函数时,薪水值将归属于一个函数,并且在您检索薪水值时将调用该函数,因此再次运行它会返回Session.get("salary")语句的当前值。

10-08 08:10