如何在帮助程序中查找之前确保我的订阅已准备就绪?

时间:2015-05-18 18:38:53

标签: meteor

我希望做一些非常简单的事情,即将数据库中字段的值转换为助手中的变量。该文件如下:

{
  hero: "Simon Belmont",
  universe: "Castlevania",
  items: ["Whip", "Cross", "Oak Stake"]
}

在帮手中,我想做类似的事情:

var selectedHeroId = Session.get('whichHeroSelected')
var heroItems = Heroes.findOne({_id: selectedHero}).items
然而,事实证明这是非常善变的。有时它会抱怨items没有定义。奇怪的是,当我将变量命名为items时,它会起作用,但在我将其命名为heroItemsitemsArray时则无效。

所以我正在寻找一种方法来确保在数据库中查找内容之前订阅Heroes。顺便说一句,我在Iron Router的waitOn函数中订阅了它。

1 个答案:

答案 0 :(得分:2)

听起来你只需要一个guard

Template.myTemplate.helpers({
  items: function() {
    var selectedHero = Heroes.findOne(Session.get('whichHeroSelected'));
    return selectedHero && selectedHero.items;
  }
});