仅在ID中显示Meteor中的相关文档

时间:2014-06-24 21:20:50

标签: javascript meteor meteor-blaze

我认为这个问题与已经存在的问题不同。我一直在努力解决这个问题,无法找到一个好的解决方案。

假设这样的事情:

//ResourceOne { name: "foobar" } ... ResourceTwo { name: "donuts" }
Resources = new Meteor.Collection('resources');

//{ input: ResourceOneID, output: ResourceTwoID }
Connections = new Meteor.Collection('connections');

Connections将Resources连接到其他资源,仅存储其_id

我想以

的形式显示Connections列表
foobar --> donuts

我在世界上如何做到这一点?

现在我有:

{{#each connections}}
    <a href="#">{{ input_name }} --> {{ output_name }}</a>
{{/each}}

由模板助手提供支持:

input_name: function() {
    return Resources.find( { _id: this.input } ).fetch()[0].name;
}

此作品,但每当页面未完全刷新时都会失败。

更好的方法是什么?

1 个答案:

答案 0 :(得分:2)

这可能是因为您没有等待数据完全到达。当你运行这个

Resources.find( { _id: this.input } ).fetch()[0].name;

您假设Resoureces.find(..).fetch()[0]有结果,但情况并非总是如此。最初加载页面时,数据可能尚未到达浏览器,结果为null。如果您检查name属性,则会抛出异常。

你只需要处理这个案子就可以了:

var resource = Resources.findOne( { _id: this.input } );
return resource && resource.name;

注意:findOne().fetch()[0]相同。

因此,如果resource为null,则null会返回name,并且不会检查其{{1}}属性。