javascript - Meteor 函数与变量跟踪

标签 javascript meteor

我正在学习 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 的限制/事情还是 meteor 的事情?

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

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

谢谢

最佳答案

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

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

关于javascript - Meteor 函数与变量跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35973389/

相关文章:

javascript - 如何查找具有特定 data- 属性的所有标签?

javascript - 如何使用 jQuery() 删除元素

javascript - 使用 k6 进行 Meteor 应用程序负载测试,等待 body 元素

javascript - 使用 Meteor 方法传递用户数组

javascript - 如何在另一个 div/span 上延续一个 div 的背景?

javascript - socket.io 事件和自定义事件

meteor & Mongo : addToSet inserting

javascript - 如何使用 Meteor 模板助手函数组合保持 DRY?

mongodb - meteor 怎么会立即知道 MongoDB 的变化?

javascript - 单击按钮后,ngOnDestroy 不会触发