實時開發框架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查看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章