实时开发框架Meteor API解读系列<5>Session

实时开发框架Meteor API解读系列<五>Session

写在前面的话

  1. 本篇博客主要讲Session
  2. 使用的meteor版本为0.8.0
  3. 老话重提 ,尽量以官方文档为主
  4. 本篇博客有不正确的地方在所难免,如有发现望指出。
  5. 本篇博客地址:http://blog.csdn.net/a6383277/article/details/23421611 转载请注明出处,谢谢

Session

Meteor里面的Session不是我们以前接触过服务端的Session, 这里的Session是在客户端使用的(浏览器)一个对象。不过它功能和服务端Session有一点相似,那就是都是用来保存数据的。这个保存的数据是一个活性数据源。当然,Session在客户端是个全局变量,在客户端任何地方都可以直接使用它。

在详细说明之前,先看它的几个函数。如果有一点编程经验根据函数名就知道它的作用了。注意,Session对象只存在于客户端,它的函数也只能在客户端使用。不能在服务端使用,服务端是没有Session这个对象的。

Session.set(key,value)

在Session中保存或修改一个键值对。key 是String类型,value是个EJSON对象,当然也就包括基本数据类型。 
例如:

Session.set("people","张三");//保存一个新的键值对
....
Session.set("people",{name:"张三",age:18}) ;//修改键值对。这里仅为了展示能保存的数据类型才选择不同数据类型,通常情况下,保存的数据类型是不会变化的,因为通常需要绑定元素或其他动作。

Session.setDefault(key,value)

设置默认值,当key的value未定义时。 如果value有定义,那么它的效果和set一样。

Session.get(key)

获取键的值。

session对象只有以上几个函数,相对来说比较简单。下面说说个人使用的经验。

Experience

想来说说活性数据源的问题。

活性数据源

官方没有给出完整的定义,只是用单词Reactivity Data来描述,我不清自己翻译成活性数据源是否正确。理解起来很简单,所有使用了活性数据源的funcation(这里指 Template对象中使用的function)和template 一旦它所依赖的活性数据源发生值的变化,那么它将重新调用或者渲染。

简单看个代码。结构如下:(”-“代表应用根目录)

-
 --client #文件夹
    |-API-005.html
    |-API-005.js

API-005.html:

<head>
  <title>API-005</title>
</head>

<body>
  {{> testValue}}
  <hr />
  {{> testFunction}}
</body>

<template name="testValue">
  {{testSessionChangeForValue}}
</template>


<template name="testFunction">
  {{testSessionChangeForFunction}}
</template>

API-005.js:

Session.setDefault("name","test");//设置默认值
var  demoFunctionWillNotCall = function (){
    var s = Session.get("name")
    console.log("name Session 改变,发生调用");//这句话永远不会打印,哪怕name发生改变。因为它没有被任何Template对象调用
}
var demoFunctionWillCall = function(){
    var s = Session.get("age");
    console.log("age Session 改变,发生调用");//一旦age的值改变 这句话就会打印,因为它在testFunction中被调用了
    return "call"
}

Template.testValue.testSessionChangeForValue = function () {
  return Session.get("name");
};

Template.testFunction.testSessionChangeForFunction = function () {
  demoFunctionWillCall()
  return "test Age";
};

启动应用,打开浏览器控制台。可以看到demoFunctionWillNotCall并没有执行,而demoFunctionWillCall执行了一次,这很正常,因为模板渲染的时候被调用了。现在清空控制台。在控制台运行以下代码

Session.set("name","keepmoving");
Session.set("age",999)

可以很明白的看到,结果如注释中所说一样。

Session使用的注意事项

避免多处使用

因为Session是全局对象,在任何地方都可以调用,某个key值的改变,影响所有的引用它的Template或function。又因为在实际开发中,我们一般需要建立多js或者Template文件保证代码的整洁性,所以如果多处都使用了同一个Session的key,那么一旦这个key需要修改,那么它所影响的范围也很广,可能造成代码出错。因此尽量避免这多个js文件中使用同一个Sesion的key值。这个会对以后的修改带来便利。

key命名规范

由于Session是全局变量,所有的值都存在了同一个Session中,一旦你的key命名不规范,可能导致两个不同作用的key值 重叠造成值的非正确性。哪怕key的名称长一点多几个单词也没关系,得保证它的唯一性。因为所过Session.set方法也是可以修改key值的。由于个人有个人的习惯,那么我仅给出个人的使用经验。在命名方面如:

Session.set("_name_testValue","abc")  //key+所用在的模板
或者
Session.set("_name_collectionName","abc") //key+所用在的Collection的名称

等等,保证key是明确的,唯一的就行。

总结

以上仅是简单说明的一些活性数据源,当然活性数据源不仅只有Session,Session的用处也不仅是Demo中的这点用法,以后在用到时会进行说明。

涉及代码下载地址:http://download.csdn.net/detail/a6383277/7175955 
或者到我的github :https://github.com/huyinghuan/Lesson/ 目录下的Meteor/API-005查看