Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 在助手中查找订阅之前,如何确保订阅已准备就绪?_Meteor - Fatal编程技术网

Meteor 在助手中查找订阅之前,如何确保订阅已准备就绪?

Meteor 在助手中查找订阅之前,如何确保订阅已准备就绪?,meteor,Meteor,我希望做一些非常简单的事情,即将数据库中某个字段的值转换为助手中的变量。该文档如下所示: { hero: "Simon Belmont", universe: "Castlevania", items: ["Whip", "Cross", "Oak Stake"] } 在helper中,我希望执行类似的操作: var selectedHeroId = Session.get('whichHeroSelected') var heroItems = Heroes.findOne({_

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

{
  hero: "Simon Belmont",
  universe: "Castlevania",
  items: ["Whip", "Cross", "Oak Stake"]
}
在helper中,我希望执行类似的操作:

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


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

听起来你只需要一个:

Template.myTemplate.helpers({
项目:功能(){
var selectedHero=heros.findOne(Session.get('whichHeroSelected');
返回selectedHero&&selectedHero.items;
}
});

不错,但有两件事:1)我不是马上返回数据,而是在之前处理数据。2) 根据这篇文章,
waitOn
应该自动解决这个问题。为什么这里不是这样呢?第一件事很容易解决,当然,通过使
herodems
函数返回与您所说相同的内容。这完全解决了我的问题,但我仍然好奇为什么
waitOn
不起作用。它应该起作用,但我不能说为什么没有看到
waitOn
代码。您是否在其中启动了多个订阅?如果是这样,您将需要返回一个数组(这是一个常见的问题)。我意识到这很可能是因为它们依赖于会话,而会话又依赖于DOM中的内容呈现。我对您的解决方案非常满意,并已开始使用它重写许多代码!:)听起来很复杂。当阻止渲染非常重要时,我建议使用
waitOn
,因为渐进式更新在UI中没有意义。在所有其他情况下,我认为使用警卫更有意义。