【问题标题】:Displaying related documents in Meteor with only the id在 Meteor 中仅显示 id 的相关文档
【发布时间】:2014-06-25 07:37:05
【问题描述】:

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

假设是这样的:

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

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

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

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

foobar --> donuts

我到底是怎么做到的?

现在我有:

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

由模板助手提供支持:

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

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

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

【问题讨论】:

    标签: javascript meteor meteor-blaze


    【解决方案1】:

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

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

    【讨论】:

    • 感觉就像魔法一样。非常感谢!你介意我问:我理解 return 语句中的习惯用法,但是是什么导致系统“等待”resource.name 具有值?即,我们如何知道resource.name 在返回时不会为空?
    • 顺便说一句,我尝试投票,但我还没有足够的声望点...如果有任何其他方式可以补偿,请告诉我。这让我难倒了一段时间。
    • @m52go 不用担心。它真的不用等待。最初它返回“”(无)&一旦数据到达它就会填满它,因为它是被动的,它会在没有更多代码的情况下调整到新数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2015-11-22
    • 2015-10-10
    • 1970-01-01
    • 2017-08-17
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多