Meteor开发平台入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

前端代码 - 全局字典/Session

可能出乎你的意料,Meteor中的Session并不是我们通常在Web应用中的会话 对象,它仅仅是客户端的一个字典型全局变量。

使用set()方法,可以将值以指定名称保存在Session中;使用get()方法, 可以从Session中取出指定名称的值:

//在Session中将counter的值设置为0
Session.set("counter",0);
//使用counter从Session中取出值
Session.get("counter");

setDefault()方法几乎与set()方法的作用几乎一致,唯一的差别在于, 对于某个指定的名称/键,只有第一次对setDefault的调用是有效的。因此 setDefault方法通常用于初始化代码。

≡ 反应式/Reactive对象

Session与普通的全局变量的区别在于,它是反应式/Reactive变量。让我们回忆 一下test应用的逻辑,来尝试理解这个相当有档次的术语。

在test应用中,当你点击一下按钮,test.js中的代码只是简单地将Session中 的counter加1再存回去,并没有更新DOM的操作代码:

  // increment the counter when button is clicked                                       
  Session.set('counter', Session.get('counter') + 1);

但是,我们的确看到,在页面中的数字随着我们的点击在相应的增加 —— 看起来,Session 的变化自动引起了模板的变化 —— 这完全是因为Session是一个反应式变量,而这个计算 过程,被称为反应式计算/Reactive Computing反应式编程/Reactive Programming

我相信反应式计算有仿生的成分。想一想夏天的蚊子。当你试图悄悄靠近一只蚊子,迅速拍下 手掌时,你的手掌的快速运动导致了蚊子周围气流的异常变化,蚊子感受到了这个变化,拍拍翅膀 ,飞了 —— 蚊子执行着一个相当成熟的反应式计算。

≡ 依赖关系与变化传播

session

图中的虚线表示的是依赖关系链:hello模板依赖于counter helper,而counter helper依赖于Session对象。图中的实线表示的是反向的变换传播链:用户点击按 钮触发了对Session对象的变化,这触发了依赖于Session对象的counter helper的重新计算, 继而couner helper的变化又触发了依赖于counter helper的hello模板的重新计算, 于是我们看到了一个随动变化的用户界面。

这意味着,一旦声明了对象间的依赖关系,下游对象的变化将自动地沿着依赖关系链 反向传播给上游对象。这就是反应式/Reactive的核心理念。

修改test.js,设置Session中counter的初始值为1000.