函数中的流星反应性,返回session.get('variable'),每次运行session.set('variable')运行?

时间:2014-02-22 03:33:15

标签: meteor

好吧,假设我有一个返回Session变量的客户端函数,例如:

Template.hello.random = function() {
  return Session.get('variable');
};

其他地方让我说我有一个按钮

Session.set('variable', random_number);

每次点击该按钮,我的Template.hello.random函数都会运行吗?我觉得很难绕过那个......

1 个答案:

答案 0 :(得分:4)

所有流星“魔法”都来自Deps.DependencyDeps.Computationhttp://docs.meteor.com/#deps_dependency

例如

var weather = "sunny";
var weatherDep = new Deps.Dependency;

var getWeather = function () {
  weatherDep.depend()
  return weather;
};

var setWeather = function (w) {
  weather = w;
  // (could add logic here to only call changed()
  // if the new value is different from the old)
  weatherDep.changed();
};

Session镜像这种模式,但作为键/值存储而不是一个值。 (实际上Session只是ReactiveDict class

的一个实例

当您有一个调用getWeather()的计算时,.depend()调用会将其与计算相关联 - 而.changed()调用invalidates即计算。

例如,通过Deps.autorun()

进行计算
computaton = Deps.autorun(function(){
  var localWeather = getWeather();
  console.log("local weather", localWeather);
});
computation.onInvalidate(function(){ 
  console.log("a dependency of this computation changed");
});
console.log("setting  weather");
setWeather("abc");

使用此基础结构 - 我们发现Template帮助程序在计算中运行 - 当计算的依赖关系为.changed()时,它会将模板排队以重新呈现。