从meteor中的订阅获取反应值

从meteor中的订阅获取反应值,meteor,meteor-blaze,Meteor,Meteor Blaze,在Meteor中,如何正确地从集合中的属性(在本例中为响应)返回值,以便将其发送到数据属性?我尝试了以下功能: Responses: function(answer) { return Responses.findOne({answerId: answer.hash.answer}); } 我在spacebars模板中将其称为: data-selected="{{Responses answer=_id}} 当我查看HTML时,它会说选择的数据是=“[object object]”,

在Meteor中,如何正确地从集合中的属性(在本例中为响应)返回值,以便将其发送到数据属性?我尝试了以下功能:

Responses: function(answer) {
    return Responses.findOne({answerId: answer.hash.answer});
}
我在spacebars模板中将其称为:

data-selected="{{Responses answer=_id}}
当我查看HTML时,它会说选择的数据是=“[object object]”,这并不奇怪,但我不知道如何仅从匹配中返回响应值。我可以在末尾添加.response,它可以工作,但会出现预期的“未定义”错误,我知道它不是被动的。我见过有人使用wrapasync,但那是用于方法,而不是订阅。我应该注意到有几个响应,因此代码必须适合于回答的#for循环,其中responses变量分别跟踪每个用户的输入。
谢谢

我不确定所选数据是否为“{{Responses answer=\u id}”。由于您已经在for循环中,因此html代码可以简单地如下所示:

data-selected="{{Responses}}"
在助手函数中,您可以说:

var myResponse = Responses.findOne({answerId: this._id}).response;
if (myResponse != null){
    return myResponse;
else {
    return "";
}

当页面仍在加载且数据尚不可用时,myResponse仍为null,因此帮助程序返回空字符串“”。此后不久,数据变为可用,您的数据返回,控制台中没有任何错误。

我不确定所选数据=“{{Responses answer=\u id}”。由于您已经在for循环中,因此html代码可以简单地如下所示:

data-selected="{{Responses}}"
在助手函数中,您可以说:

var myResponse = Responses.findOne({answerId: this._id}).response;
if (myResponse != null){
    return myResponse;
else {
    return "";
}

当页面仍在加载且数据尚不可用时,myResponse仍为null,因此帮助程序返回空字符串“”。此后不久,数据将变为可用,并且您的数据将返回,在您的控制台中不会出现任何错误。

哇,非常感谢您的提示。这确实简化了事情。在末尾添加.response会出现以下错误:“模板帮助程序中的异常:TypeError:无法读取未定义的属性'response'”,但它确实会将正确的值打印到数据帮助程序,因此我认为这只是一个异步问题,但我不确定如何修复它。很高兴提供帮助。您可以做的是首先将Responses.findOne({answerId:this.id}).response放入变量中,然后检查它是否为null,如果为null则不返回任何内容。数据变得可用可能需要一点时间,因此此if语句可以防止错误,并在数据可用时自动刷新帮助程序。您永远不会注意到助手不返回任何内容的最小时间范围,因为这是页面加载的一部分。我更新了我的答案以反映这个解决方案。哇,非常感谢您的提示。这确实简化了事情。在末尾添加.response会出现以下错误:“模板帮助程序中的异常:TypeError:无法读取未定义的属性'response'”,但它确实会将正确的值打印到数据帮助程序,因此我认为这只是一个异步问题,但我不确定如何修复它。很高兴提供帮助。您可以做的是首先将Responses.findOne({answerId:this.id}).response放入变量中,然后检查它是否为null,如果为null则不返回任何内容。数据变得可用可能需要一点时间,因此此if语句可以防止错误,并在数据可用时自动刷新帮助程序。您永远不会注意到助手不返回任何内容的最小时间范围,因为这是页面加载的一部分。我更新了答案以反映此解决方案。