流星函数与变量跟踪

时间:2016-03-13 17:31:34

标签: javascript meteor

我正在学习流星(和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限制/事物还是流星事物?

我试着四处寻找,但没有发现任何有用的东西。我知道如何工作,但试图理解为什么我需要将变量设置为函数而不是值?

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

由于

1 个答案:

答案 0 :(得分:1)

当代码被解释时,工资被计算到表达式的右侧,当发生这种情况时,Session.get("salary")在页面加载时被评估,并且该值被返回到salary属性。

当你将salary的值设置为一个函数时,工资值被归属于一个函数,并且每当你检索工资值时都会调用该函数,因此再次运行它会返回Session.get("salary")语句的当前值