寫在前面的話
- 本篇博客主要講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查看