动态打开和关闭订阅以限制收到的缓存“Uncaught TypeError:将循环结构转换为JSON”

时间:2013-03-11 14:49:25

标签: javascript mongodb meteor

为了限制客户端的缓存,我们认为我们可以根据Meteor文档的建议将该集合的Meteor.subscribe放入Meteor.render中来打开和关闭特定的Collection - “此外,调用在被动上下文中的Meteor.subscribe设置一个订阅,当上下文无效时,该订阅会自动停止。“

但是我们不断收到“Uncaught 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); .....}

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

1 个答案:

答案 0 :(得分:1)

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

客户端上的任何地方:

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

如果您现在使用Session.set('isViewingAlerts',false),则自动运行功能中的代码将失效并重新执行。

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

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

-best, 扬