【发布时间】:2013-07-17 16:39:36
【问题描述】:
假设我有一个名为 GameStatus 的 Meteor 集合。我有不同角色的用户,但我为所有用户发布了 GameStatus 集合。我只是在 server/publications.coffee 中使用以下内容
Meteor.publish 'gamestatus', ->
GameStatus.find()
对于两个角色(“S”和“B”),当我使用以下模板帮助程序(在文件 client/views/seller.coffee 和 中定义)时,我没有问题client/views/buyer.coffee)
currentRound: ->
return GameStatus.findOne().currentRound
对于这些,我永远不会收到以下错误。
Uncaught TypeError: Cannot read property 'currentRound' of undefined
但是对于另一个角色('admin'),使用相同的模板助手(在文件 client/views/admin.coffee 中定义)会给出上面显示的 Uncaught TypeError。如果我改写它会起作用:
currentRound: ->
return GameStatus.findOne()?.currentRound
我有点理解为什么会这样。我认为,在加载页面时,该集合首先不可用,然后才可用。但是为什么上面显示的其他模板不会发生这种情况呢?
如果有人能帮助澄清这一点,我们将不胜感激。
【问题讨论】:
-
当您订阅该集合时,在回调中将一些内容记录到控制台,以便您知道它何时可用,并对失败的调用执行相同的操作。这样你就可以检验你的假设了。
-
@MrD 你能举个例子吗?我应该记录什么可以帮助我知道订阅何时可用。似乎仅针对此特定角色,它们最初不可用。
-
你想为你的订阅 gist.github.com/devonbarrett/b698c10cc427ee2c1811 做这样的事情,然后为 currentRound 函数记录类似的事情,看看它是否在集合准备好之前被触发
标签: javascript meteor