好吧,假设我有一个返回Session变量的客户端函数,例如:
Template.hello.random = function() {
return Session.get('variable');
};
其他地方让我说我有一个按钮
Session.set('variable', random_number);
每次点击该按钮,我的Template.hello.random函数都会运行吗?我觉得很难绕过那个......
答案 0 :(得分:4)
所有流星“魔法”都来自Deps.Dependency
和Deps.Computation
(http://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()
时,它会将模板排队以重新呈现。