写在前面的话
- 本篇博客主要讲Session
- 使用的meteor版本为0.8.0
- 老话重提 ,尽量以官方文档为主
- 本篇博客有不正确的地方在所难免,如有发现望指出。
- 本篇博客地址: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查看