我正在学习流星(和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")
语句的当前值。