2016-03-13 30 views
0

我正在學習流星(和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

當代碼被解釋,工資被評估以表達式的右側,當發生這種情況,Session.get("salary")得到在頁加載評估,該值被返回到工資屬性。

當您將工資值設置爲某個函數時,工資值歸屬於一個函數,並且每當您檢索工資值時都會調用該函數,因此再次運行該函數將返回Session.get("salary")語句的當前值。