为了限制客户端的缓存,我们认为我们可以根据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); .....}
知道我做错了什么吗?建议?
答案 0 :(得分:1)
我不知道您的错误消息来自哪里。但您可以使用Deps.autorun()
和会话变量轻松归档“仅在必要时”订阅:
客户端上的任何地方:
Deps.autorun(function () {
if (!Session.get('isViewingAlerts')) Meteor.subscribe('alerts');
});
如果您现在使用Session.set('isViewingAlerts',false)
,则自动运行功能中的代码将失效并重新执行。
更进一步,您可以通过向发布功能“提醒”添加参数来订阅警报子集。
编辑:
我最近遇到了问题,使用动态订阅时模板没有被动反应。由于订阅未在重绘时加载。为了解决这个问题,我们使用Metor.subcribe的回调来改变Session变量,使得该模板的呈现依赖于订阅准备就绪,从而获得反应。
-best, 扬