我正在学习流星(和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限制/事物还是流星事物?
我试着四处寻找,但没有发现任何有用的东西。我知道如何工作,但试图理解为什么我需要将变量设置为函数而不是值?
如果有人能指出我正确的方向,我将不胜感激!
由于
答案 0 :(得分:1)
当代码被解释时,工资被计算到表达式的右侧,当发生这种情况时,Session.get("salary")
在页面加载时被评估,并且该值被返回到salary属性。
当你将salary的值设置为一个函数时,工资值被归属于一个函数,并且每当你检索工资值时都会调用该函数,因此再次运行它会返回Session.get("salary")
语句的当前值