會話對象是一個全局(singletone)註冊表。有很多原因沒有使用它們(只是谷歌爲「爲什麼(單線程,全局對象,註冊表模式)(是|是)不好」
在流星的情況有點特別。非常簡單的方法來反應性地存儲變量,這就是爲什麼你不在應用程序中使用全局變量的唯一原因。假設你不需要反應性 - 你會把它變成一個全局變量嗎?可能不是。重新使用會話從代碼中的一個地方獲取變量的內容到另一個地方(在兩個其他方式中不相關的對象之間是不可見的「神祕橋樑」),這既不是「流星」方式也沒有乾淨的使用(指上面的搜索結果),這只是一個容易的,骯髒的可能性
清潔方法
如何避免這種情況:創建您自己的反應變量。流星提供了所有它的手段,它真的很容易做到:
(function() {
var currentProject;
var currentProjectDependency = new Deps.Dependency();
Meteor.Router.add({'/projects/:id', function(id) {
currentProject = id;
currentProjectDependency.changed();
return 'project';
}
Template.project.project = function() {
Deps.depend(currentProjectDependency);
return Projects.findOne(currentProject);
}
}());
現在我們不使用會話來存儲信息,但有反應也是如此。此外,我們不污染全球空間。請注意,最新發布的Meteor會自動添加閉包。
這個例子可以擴展到更復雜的用例,其反應性跨越幾個對象(例如控制器)。看看我的navigation package是一個更復雜的例子。
理由使用會話
那麼,爲什麼會話存在呢?兩個原因:
爲了簡單起見。流星努力成爲初學者的友好。由於對反應性和體系結構的理解,我描述的方法有點複雜。大多數項目都足夠小而不關心這一點。
但是更大的項目可以使用會話:跨頁面重新加載存儲信息時,您無法恢復其他項目。在我看來,這是使用會話的唯一理由。會話內容在代碼推送頁面重新加載時「持久」。如果這認爲不好呢?不是,因爲只有一個對象依賴於會話的內容。請注意,這不適用於您的示例,因爲您可以輕鬆恢復信息。
來源
2013-03-27 12:03:16
Fge
我相信這是它的設計。 [Session](http://docs.meteor.com/#session)允許模板被反應,所以如果您的URL上的ID發生更改,您的模板將會更新。 – pstuart2 2013-03-26 01:50:24
我同意這是流星的方式。擁抱它:) – adrianj98 2013-03-26 03:24:45
大多數人認爲這是不穩定的,但@ adrianj98說,這是流星的方式。起初我甚至覺得不舒服。但後來我發現它是行得通的! – Prashant 2013-03-26 07:23:20