【发布时间】:2015-12-28 06:57:14
【问题描述】:
这是我的场景:
我有一个布局模板,需要检查用户是否至少属于一个团队。如果没有,则在整个站点上显示一个 div。用户只能看到他们所属的团队,所以我创建了一个简单的出版物:(代码示例是 CoffeeScript)
Meteor.publish 'teams', ->
return null if !@userId
Teams.find {'members._id': @userId}
这很好用,并且控制台中的 Teams.find().fetch() 给出了预期的结果。
但是,如果我将此代码放入 Template.layout.rendered 中,它就不起作用。
Template.layout.rendered = ->
teams = Teams.find().fetch()
hasTeams = teams.length > 0
if !hasTeams
...do stuff..
显然这不起作用,因为团队发现是异步的,并且在需要做出决定时没有加载。对于普通的模板/页面,我只会使用 IronRouter waitOn(),但是在布局上我该怎么做?
我可以在我的路由器中执行 waitOn,但由于数据是“全球性的”并且将在任何地方使用,并且因为用户可以深入链接到整个地方的站点,我不想添加它等待每条路线。
那么正确的模式是什么?如何让流星客户端加载全局数据并在运行路由之前等待数据?
【问题讨论】:
标签: javascript meteor coffeescript