是的,您可以订阅 Session 值。
看看自动订阅的文档:
http://docs.meteor.com/#meteor_autosubscribe
// Subscribe to the chat messages in the current room. Automatically
// update the subscription whenever the current room changes.
Meteor.autosubscribe(function () {
Meteor.subscribe("chat", {room: Session.get("current-room");});
});
此代码块显示了一种使用方法。基本上,只要“当前房间”的值发生变化,Meteor 就会更新视图。
编辑
我误解了最初的问题,并决定我需要在某种程度上赎回自己。我刚刚做了一些测试,据我所知,您目前只能订阅 collection.find() 和 session.get() 调用。所以你不能订阅整个 session 对象,甚至不能订阅 keys 对象。
但是,您可以将 Session 值设置为一个对象,这可能不是最优雅的解决方案,但这对我有用,可以通过一些骇客来跟踪密钥对象,以防止出现循环对象错误。
var mySession = {
set: function(key, val){
var keys = Session.keys,
map = {};
Session.set(key, val);
for (var prop in keys) {
if(!(prop === "keys")){
map[prop] = keys[prop];
}
}
Session.set('keys', map);
}
};
这为您提供了一些看起来很像原始功能的东西,并且可以帮助您在添加或更改会话值时跟踪和更新模板。
这是我的模板助手(借用以前的答案):
Template.hello.keys = function() {
map = [];
keys = Session.get('keys');
for (var prop in keys) {
map.push({key:prop, value:keys[prop]});
}
return map
};
这是实际的模板:
<template name="hello">
<div class="hello">
{{#each keys}}
{{key}} {{value}} <br />
{{/each}}
</div>
</template>
这样你就可以调用 mySession.set("thing", "another thing") 并且它会在屏幕上更新。我是 Javascript 的新手,所以如果我在这里遗漏了一些明显的东西,请告诉我,或者让我知道是否有更优雅的方式来做这件事。