这是我的场景:
我有一个布局模板,需要检查用户是否属于至少一个团队。如果没有,则在整个站点上显示一个 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,但由于数据是“全局”的并且将在任何地方使用,并且因为用户可以在任何地方深层链接到站点,所以我不想添加该数据等待每一条路线。
那么正确的模式是什么?如何让 meteor 客户端加载全局数据并在运行路线之前等待数据?
最佳答案
更多的思考和搜索在这里找到了答案:struggling to wait on subscriptions and multiple subscriptions
我将 Router.configure 更改为:
Router.configure
layoutTemplate: 'layout'
waitOn: ->
return [
Meteor.subscribe('teams')
]
可以将多个订阅添加到返回数组中,我相信它会等待所有订阅。
关于javascript - 正在加载并等待 "global" meteor 订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283552/