0

为了限制客户端的缓存,我们认为我们可以打开和关闭对特定集合的订阅,方法是按照 Meteor 文档的建议将该集合的 Meteor.subscribe 放在 Meteor.render 中 - “此外,调用 Meteor.subscribe在反应式上下文中设置订阅,当上下文无效时自动停止。”

但是,我们不断收到“未捕获的 TypeError:将循环结构转换为 JSON”错误。

程序流程如下:

Appliances = new Meteor.Collection 'appliances'
Alerts = new Meteor.Collection 'alerts'

在客户端

under Meteor.startup subscribes to collection 'appliances'
Meteor.subscribe ('appliances')
Use Appliances.find{}.observe to monitor changes

当检测到新的 Appliances 项目时,使用 Meteor.render 重新订阅警报并列出该项目的所有警报

Meteor.render(function() {Meteor.subscribe(Alerts); .....}

知道我做错了什么吗?建议?

4

1 回答 1

1

我不知道您的错误消息来自哪里。Deps.autorun()但是您可以使用Session 变量轻松归档“仅在必要时”订阅:

客户端上的任何位置:

Deps.autorun(function () {
  if (!Session.get('isViewingAlerts')) Meteor.subscribe('alerts');
});

如果您现在使用Session.set('isViewingAlerts',false), autorun 函数中的代码将失效并重新执行。

更进一步,您可以通过向发布函数“alerts”添加参数来订阅警报子集。

编辑:
我最近遇到了一个问题,即使用动态订阅时模板没有反应。由于重绘时未加载订阅。为了解决这个问题,我们为 Metor.subcribe 使用了一个回调,它更改了一个 Session 变量,以使该模板的呈现依赖于准备就绪的订阅,从而获得反应性。

-最好的,扬

于 2013-03-11T17:17:05.657 回答