2

我认为这个问题与这里已经提出的问题不同。我一直在为此苦苦挣扎,找不到好的解决方案。

假设是这样的:

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

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

连接将资源连接到其他资源,仅存储它们_id的 s。

我想在表单中显示连接列表

foobar --> donuts

我到底是怎么做到的?

现在我有:

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

由模板助手提供支持:

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

这有效,但只要页面没有完全刷新就会失败。

有什么更好的方法来做到这一点?

4

1 回答 1

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属性。

于 2014-06-24T23:37:05.233 回答