我认为这个问题与已经存在的问题不同。我一直在努力解决这个问题,无法找到一个好的解决方案。
假设这样的事情:
//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;
}
此作品,但每当页面未完全刷新时都会失败。
更好的方法是什么?
答案 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}}属性。