我有以下代码:
sub_geo = Meteor.subscribe('geo');
console.log('sub_geo returned from Meteor.subscribe: ');
console.log(sub_geo);
Session.set('sub_geo', sub_geo);
console.log('sub_geo retrieved from Session: ');
console.log(Session.get('sub_geo'));
输出如下:
sub_geo returned from Meteor.subscribe:
> Object {stop: function, ready: function}
sub_geo retrieved from Session:
> Object {}
显然我需要存储返回的订阅句柄,因为我需要稍后调用它上面的ready()
和stop()
函数。除了Session之外,还不确定如何存储它。我可以使用全局变量吗?此外 - 即使还有其他方法,为什么这种方法不起作用?
答案 0 :(得分:1)
它不起作用,因为您只能在会话变量中存储EJSON可序列化对象。如果您需要当前文件之外的订阅句柄,则需要将其存储在全局变量中(可能在Subscriptions
之类的命名空间下 - 例如,请参阅richsilv对this question的回答。
答案 1 :(得分:0)
你实际上可以做到这一点,但不是你想象的那样。 只需像你一样设置会话:
Session.set('sub_geo', sub_geo);
然后,如果您想对订阅执行某些操作,请从Meteor自己的注册表中检索句柄:
const handle = Meteor.default_connection._subscriptions[Session.get('sub_geo').subscriptionId]
如果你打算使用Session(不鼓励,除非你真的需要),清理它:
delete Session.keys['sub_geo'];
目前我在Meteor 1.3.3.1中运行良好,但也可能适用于大多数以前的版本。
PS:会话的替代方案是Reactive Var和Reactive Dict。