【问题标题】:Displaying Meteor.user()显示 Meteor.user()
【发布时间】:2015-04-16 00:56:14
【问题描述】:

我有这个模板:

<template name="index">
  {{#if currentUser}
    {{userid}}
  {{/if}}
</template>

有什么区别

Template.index.helpers({
    userid: function() {
        return Meteor.user()._id;
    }
});

Template.index.helpers({
    userid: Meteor.user()._id
});

最后一个给出了这个错误: 未捕获的类型错误:无法读取未定义的属性“_id”

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    最简单的方法是使用{{currentUser._id}}

    Meteor.user()._id 是正确的。问题是当您加载页面时,最初数据不可用并且Meteor.user() 将为空,直到建立 DDP 连接并且您的浏览器将您登录(这需要几百毫秒)。 Meteor.user() &amp;&amp; Meteor.user()._id 更正此问题。

    两个Meteor.user()._id 之间的区别在于,您传递的是加载模板时加载的第一个静态值。即使Meteor.user() 更改或您注销,它也将保持不变。

    当您传递 function 时,您告诉助手它可以重新计算,如果有任何反应性更改,它将更新。

    【讨论】:

    • 是的。我知道。但我想了解其中的区别。
    • 您在我回答后的 1 分钟内编辑了您的答案并发表了评论,请给我一些以适应您的新问题!
    • @torayeff 我已经用不同的方式更新了答案。
    • 但是Template.index.helpers({ userid: Meteor.userId() }); 似乎有效
    • @VamsiV 这是不正确的。我在答案中提到它并不总是是正确的,因为它不是反应性的。例如:如果您在使用相同模板时注销,它仍然会说您已登录。如果您以其他人身份登录,它会说您以第一人身份登录。如果将其嵌套在方法中,则更改用户或注销将始终正确。如果你直接传递Meteor.userId(),你传递的是静态值,而不是可以重新计算的function
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2015-09-19
    相关资源
    最近更新 更多